我有一个简单的表:
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
应该提供 --why ?因为 table 找到了 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 在那里不被识别......
我该如何解决?