私は単純なテーブルを持っています:
DECLARE @t TABLE(item INT, itemType INT )
insert INTO @t SELECT 1000,0
insert INTO @t SELECT 1000,3
insert INTO @t SELECT 1000,5
insert INTO @t SELECT 1000,6
insert INTO @t SELECT 2000,0
insert INTO @t SELECT 2000,3
insert INTO @t SELECT 2000,5
insert INTO @t SELECT 2000,6
insert INTO @t SELECT 3000,0
insert INTO @t SELECT 3000,10
insert INTO @t SELECT 4000,11
すべてのアイテムを選択したいのですが、行がある場合は、itemtype = 3
そのベース(存在する場合)も提供します。itemtype
itemType = 0
例えば :
itemType = 3 の場合
1000,0
提供する必要があります --なぜですか? table にも 1000 + itemType 0
1000,3
を指定する必要があるため --なぜ ? itemType=3
2000,0
を指定する必要があることを確認したためです --なぜ ? テーブルが 2000,3 を検出し、この 2000 にも itemType=0
2000,3
があるため、提供する必要があるのはなぜですか? itemType=3 を探したためitemType = 10 の場合
3000,0
提供する必要があります --なぜですか? テーブルが 3000,10 を検出し、この 3000 にも itemType=0
3000,10
があるため、提供する必要があります --なぜですか? itemType=10 を探したためitemType = 11 の場合
4000,11
提供する必要があります --なぜですか? itemType=11 を探したためです (注意、 itemType 0 がないため、それ自体のみ)。
私はやり始めました:
;with cte as(
SELECT * FROM @t
)
select * from cte where itemType=3
要約すると、itemType
が見つかった場合は、それ自体 + そのゼロ型 (存在する場合) を提供し、兄弟 ( sample(#1) ) にも提供します。
...ごみ。可能です。union
しかし、CTEがそこで認識されないため、ここではできません
どうすれば解決できますか?