我有一个表格,格式如下。SQL自加入查询
Id Orig_Id Type
11 1111 Internal
12 1111 Internal
13 1111 Internal
14 1112 External
15 1112 Internal
我想检索所有Orig_Id的“ONLY”Type as Internal。查询应返回1111
我有一个表格,格式如下。SQL自加入查询
Id Orig_Id Type
11 1111 Internal
12 1111 Internal
13 1111 Internal
14 1112 External
15 1112 Internal
我想检索所有Orig_Id的“ONLY”Type as Internal。查询应返回1111
使用HAVING
:
SELECT 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
。
只是为了检查是否有只有一个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'
我想我不明白你正确
SELECT DISTINCT Orig_Id FROM YOUR_TABLE WHERE Type='Internal'