2016-04-21 54 views
1

我有一個表格,格式如下。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

回答

3

使用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_IdType = Internal沒有行。第二個確保它至少有一個Internal

ONLINE DEMO

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' 
0

我想我不明白你正確

SELECT DISTINCT Orig_Id FROM YOUR_TABLE WHERE Type='Internal'