90 votes

Comment puis-je avoir plusieurs expressions de table communes dans une seule instruction SELECT?

Je suis dans le processus de la simplification d'un compliqué instruction select, donc pensé que je pourrais utiliser des expressions de table communes.

La déclaration d'une seule cte fonctionne très bien.

WITH cte1 AS (
    SELECT * from cdr.Location
    )

select * from cte1 

Est-il possible de déclarer et d'utiliser plus d'une expression de table commune dans la même SÉLECTIONNER?

ie cela donne une erreur sql

WITH cte1 as (
    SELECT * from cdr.Location
)

WITH cte2 as (
    SELECT * from cdr.Location
)

select * from cte1    
union     
select * from cte2

l'erreur est

Msg 156, Level 15, State 1, Line 7
Incorrect syntax near the keyword 'WITH'.
Msg 319, Level 15, State 1, Line 7
Incorrect syntax near the keyword 'with'. If this statement is a common table expression, an xmlnamespaces clause or a change tracking context clause, the previous statement must be terminated with a semicolon.

NB. J'ai essayé de mettre des points-virgules et d'obtenir cette erreur

Msg 102, Level 15, State 1, Line 5
Incorrect syntax near ';'.
Msg 102, Level 15, State 1, Line 9
Incorrect syntax near ';'.

Probablement pas pertinent, mais c'est sur SQL 2008.

133voto

MarkusQ Points 15612

Je pense que cela devrait être quelque chose comme:

 WITH 
    cte1 as (SELECT * from cdr.Location),
    cte2 as (SELECT * from cdr.Location)
select * from cte1 union select * from cte2
 

Fondamentalement, WITH n'est qu'une clause ici, et comme les autres clauses qui prennent des listes, "," est le délimiteur approprié.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X