2016-08-03 35 views
0

這可能很容易,但我不太熟悉sql server和高級用法。基本上我無法爲此形成查詢。SQL Server - 在另一列不具有所有值的情況下基於ID獲取值

我有一張如下所示的表格。每個ID都有一個只有3個值(0,1,2)的類型。

ID  Type 
40271 0 
40271 1 
40271 2 
40281 0 
40281 1 

我想只選擇沒有所有類型的ID。

輸出(自缺少第三型即2):

ID  Type 
    40281 0 
    40281 1 

我需要從表中選擇的所有行,其中對於每個ID,所有類型的(0,1,2)不存在。

我試過group by,有了其他的子句,但是不能很到達那裏。

我想這一點,但它給了我兩個標識

select ID 
    from Table 
    group by ID 
    having count(distinct Type) > 1 
+2

你想擁有count(distinct type)<3',你應該把它當作一個in/exists語句。例如'select id,type from mytable t where exists(從mytable中選擇1,其中id = t.id group by id具有count(不同類型)<3)' – ZLK

+0

@ZLK就是這樣。只需要'計數(不同類型)<3'。我知道我很近,只是想不到。謝謝你,先生!添加它作爲答案,我會接受它。 – TheUknown

回答

2

的一種方式。

SELECT ID, Type 
FROM Table T 
WHERE EXISTS (
    SELECT 1 
    FROM Table 
    WHERE ID = T.ID 
    GROUP BY ID 
    HAVING COUNT(DISTINCT Type) < 3); 
-1

試試這個它是使用EXISTS檢查ID是否小於三類做

select t.* from test1 t, 
    (select id, count(*) cnt from test1 group by id) t1 
where t.id = t1.id 
    and t1.cnt < 3 
+0

不建議加入「where」語句。請使用'內部連接'。 https://msdn.microsoft.com/en-us/library/dd172122(v=vs.100).aspx –

相關問題