2010-09-10 2 views
2

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

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

СКП Я хочу использовать следующим образом

;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 

Однако я получаю ошибку синтаксиса с предложением я не могу использовать союз Все между двумя КТР. Как я могу обойти это?

ответ

0
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 
+0

спасибо! Я соглашусь с этим, поскольку это был первый ответ, который я получил! ура! –

1

ДА, но не так, как вы делаете это. попробуйте это следующим образом:

;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, соединенных вместе. Существует только одно «СО» и запятая между CTE. Затем в инструкции, следующей за CTE, вы можете ссылаться на любой из этих CTE.

1
;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 
Смежные вопросы