我有一个包含Ids和subId列的表。我有一个用户定义的数据类型和一个SubId列表。我希望所有那些在我的用户定义数据类型中都包含所有子ID的ID。例如: 该表是:
ID SubID
1 2
1 3
1 4
2 3
2 4
2 2
3 3
3 2
,数据类型为
CREATE TYPE SubIds AS TABLE
( SubId INT );
GO
有价值
SubID
3
4
我希望输出为
ID
1
2
因为只有ID 1和2包含subIds 3& 4
注意:Id和Sub ID的组合如果有任何用途
,将始终是唯一的答案 0 :(得分:2)
我们假设@s
是您的ids表:
select t.ID
from t
Where t.SubId in (select SubId from @s)
group by t.Id
having count(*) = (select count(*) from @s);
这假设两个表没有重复项。如果存在重复项,您可以使用:
select t.ID
from t
Where t.SubId in (select SubId from @s)
group by t.Id
having count(distinct t.SubId) = (select count(distinct s.SubId) from @s s);
答案 1 :(得分:1)
试试这种方式
select ID
from yourtable
Where SubID in (3,4)
Group by ID
having Count(distinct SubID)=2
另一种更灵活的方法
select ID
from yourtable
Group by ID
having sum(case when SubID = 3 then 1 else 0 end) >= 1
and sum(case when SubID = 4 then 1 else 0 end) >= 1
如果您想从SubId's
表格类型中提取SubIds
,那么
SELECT ID
FROM yourtable T
JOIN (SELECT SubID,
Count(1) OVER() AS cnt
FROM SubIds) S
ON T.SubID = S.SubID
GROUP BY ID,Cnt
HAVING Count(DISTINCT T.SubID) = s.cnt