2016-08-03 12 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)が存在しないテーブルからすべての行を選択する必要があります。

グループ練習をしましたが、句を持っていましたが、そこに手が届きませんでした。

私はこれを試してみましたが、それはIDが

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

あなたは「カウント(別個のタイプ)<3」を持っていて、おそらくそれをin/existsステートメントとして持つべきです。例えば'select id、type from mytable where(存在する場合はmytableから1を選択します。id = t.idグループのid(別名)<3)' – ZLK

+0

@ZLKです。カウント(distinct type)が3つ必要です。私は私が近くにいることを知っていた、ちょうど正しいとは思えなかった。ありがとうございます!それを答えとして加え、私はそれを受け入れます。 – TheUknown

答えて

2

一つの方法を試してみて、私を与えるには、IDが以下の3種類があるかどうかをチェックするためにEXISTSを使用しています。

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

両方がそれを行うには、この

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 –

関連する問題