una - unir dos tablas sql server
¿Cómo puedo tener múltiples expresiones de tabla comunes en una sola instrucción SELECT? (2)
Estoy en el proceso de simplificar una declaración de selección complicada, así que pensé que usaría expresiones de tabla comunes.
Declarar un solo cte funciona bien.
WITH cte1 AS (
SELECT * from cdr.Location
)
select * from cte1
¿Es posible declarar y usar más de una cte en el mismo SELECT?
es decir, este sql da un error
WITH cte1 as (
SELECT * from cdr.Location
)
WITH cte2 as (
SELECT * from cdr.Location
)
select * from cte1
union
select * from cte2
el error es
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.
NÓTESE BIEN. He intentado poner punto y coma y obtener este error
Msg 102, Level 15, State 1, Line 5
Incorrect syntax near '';''.
Msg 102, Level 15, State 1, Line 9
Incorrect syntax near '';''.
Probablemente no sea relevante, pero esto está en SQL 2008.
Creo que debería ser algo así como:
WITH
cte1 as (SELECT * from cdr.Location),
cte2 as (SELECT * from cdr.Location)
select * from cte1 union select * from cte2
Básicamente, WITH
es solo una cláusula aquí, y al igual que las otras cláusulas que toman listas, "," es el delimitador apropiado.
La respuesta arriba mencionada es correcta:
WITH
cte1 as (SELECT * from cdr.Location),
cte2 as (SELECT * from cdr.Location)
select * from cte1 union select * from cte2
Adicionalmente, también puede consultar desde cte1 en cte2:
WITH
cte1 as (SELECT * from cdr.Location),
cte2 as (SELECT * from cte1 where val1 = val2)
select * from cte1 union select * from cte2
val1,val2
son solo asunciones para las expresiones ..
Espero que este blog también ayude: http://iamfixed.blogspot.de/2017/11/common-table-expression-in-sql-with.html