¿Cómo puedo tener varias expresiones de tabla comunes en una sola instrucción SELECT?
Estoy en el proceso de simplificar una instrucción select complicada, así que pensé en usar expresiones de tabla comunes.
Declarar un único cte funciona bien.
WITH cte1 AS (
SELECT * from cdr.Location
)
select * from cte1
¿Es posible declarar y utilizar más de un cte en la misma SELECCIÓN?
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.
NB. 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 es relevante, pero esto es en SQL 2008.
2 answers
Creo que debería ser algo 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 como las otras cláusulas que toman listas, "," es el delimitador apropiado.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-02-05 13:24:19
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 expresiones..
Espero que este blog también ayude : http://iamfixed.blogspot.de/2017/11/common-table-expression-in-sql-with.html
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-11-14 19:46:10