web-dev-qa-db-ja.com

複数のCTEを使用する

複数のCTEの使用方法がわかりません

これは失敗します

; with [cteOne] as (
  select 1 as col
),
  [cteTwo]  as (
  select 2 as col
)
select 'yesA' where exists (select * from [cteOne])
select 'yexB' where exists (select * from [cteTwo])

これは機能しますが、これは私が必要とするものではありません

; with [cteOne] as (
  select 1 as col
),
  [cteTwo]  as (
  select 2 as col
)
select * from [cteOne]
union 
select * from [cteTwo]

実際の構文は、row_number()パーティションへの結合でした。
派生テーブルを使用することになりました

8
paparazzo

CTEまたはCTEのセットの後には単一のステートメントしか続かないため、最初のステートメントは失敗します。

あなたはそれを次のように書き直すことができます

; with [cteOne] as (
  select 1 as col
)
select 'yesA' where exists (select * from [cteOne])

; with [cteTwo]  as (
  select 2 as col
)
select 'yexB' where exists (select * from [cteTwo])
9
podiluska