我有一个表格,格式如下。
Id Orig_Id Type
11 1111 Internal
12 1111 Internal
13 1111 Internal
14 1112 External
15 1112 Internal
我想要检索所有“仅”类型为内部的Orig_Id。查询应该返回1111。
答案 0 :(得分:3)
使用HAVING
:
SELECT Orig_Id
FROM tbl
GROUP BY Orig_Id
HAVING
SUM(CASE WHEN Type <> 'Internal' THEN 1 ELSE 0 END) = 0
AND SUM(CASE WHEN Type = 'Internal' THEN 1 ELSE 0 END) > 0
第一个条件确保Orig_Id
没有Type = Internal
行。第二个确保它至少有一个Internal
。
答案 1 :(得分:1)
只是为了检查是否只有一个Type
而且唯一的一个是'内部'
SELECT Orig_Id
FROM (VALUES (11,1111,'Internal'),
(12,1111,'Internal'),
(13,1111,'Internal'),
(14,1112,'External'),
(15,1112,'Internal')) AS T(Id ,Orig_Id, Type)
GROUP BY Orig_Id
HAVING
-- There is one
COUNT(DISTINCT Type) = 1
-- and only one internal
AND MIN(Type) = 'Internal'