Можно ли объединить наборы результатов двух CTE с одинаковой структурой - PullRequest
2 голосов
/ 10 сентября 2010

Я хочу объединить наборы результатов из следующих CTE, чтобы я получил 4 строки данных.

Id  Name
-------------
1    Test1  
2   Test2  
3   Test3  
4   Test4

Sql, который я хочу использовать, выглядит следующим образом

;with CTE1 (Id,Name)
as
( 
    select 1 as Id, 'Test1' as Name
    union all
    select 2, 'Test2'
)
select * from CTE1
union all
;with CTE2 (Id,Name)
as
( 
    select 3 as Id, 'Test3' as Name
    union all
    select 4, 'Test4'
)
select * from CTE2

Однако я получаю синтаксическую ошибку, из-за которой я не могу использовать Union All между двумя CTE. Как я могу обойти это?

Ответы [ 3 ]

1 голос
/ 10 сентября 2010

ДА, но не так, как вы это делаете.попробуйте это так:

;with CTE1 (Id,Name)
as
( 
    select 1 as Id, 'Test1' as Name
    union all
    select 2, 'Test2'
)
,CTE2 (Id,Name)
as
( 
    select 3 as Id, 'Test3' as Name
    union all
    select 4, 'Test4'
)
select * from CTE1
union all
select * from CTE2

Вы можете объединить несколько CTE.Существует только одно "WITH" и запятая между CTE.Затем в утверждении, следующем за CTE, вы можете сослаться на любой из этих CTE.

1 голос
/ 10 сентября 2010
;with CTE1 (Id,Name) 
as 
(  
    select 1 as Id, 'Test1' as Name 
    union all 
    select 2, 'Test2' 
) 
,CTE2 (Id,Name) 
as 
(  
    select 3 as Id, 'Test3' as Name 
    union all 
    select 4, 'Test4' 
) 
select * from CTE1
union all
select * from CTE2 
0 голосов
/ 10 сентября 2010
with CTE1 (Id,Name)
as
( 
    select 1 as Id, 'Test1' as Name
    union all
    select 2, 'Test2'
),
CTE2 (Id,Name)
as
( 
    select * from CTE1
    union all
    select 3 as Id, 'Test3' as Name
    union all
    select 4, 'Test4'
)
select * from CTE2

или

with CTE1 (Id,Name)
as
( 
    select 1 as Id, 'Test1' as Name
    union all
    select 2, 'Test2'
),
CTE2 (Id,Name)
as
( 
    select 3 as Id, 'Test3' as Name
    union all
    select 4, 'Test4'
)
select * from CTE1
union all
select * from CTE2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...