2017-12-15 32 views
0

私はちょっとした挑戦をしています。私は次の表を持っています:SQL値に基づいて行を区別するルールを選択してください

| ID | STATUS | 
    12 COMPLETE 
    12 FAIL 
    11 COMPLETE 

私が選択する必要があるのは、ステータスが完了している個別のIDです。ステータスが「失敗」の場合、私はそのIDが私に返されるのを見たくありません。私はこの試みている

select distinct id where status = 'COMPLETE' 

をID 12の状態が1行に完了しているので、これは私にはしかし、すべての行を返します。私は12行も失敗しているので、その行を返さないようにしたい(与えられたIDのすべてのステータスが "COMPLETE"の行を返すだけでよい)。

誰にもこの点に関する指針はありますか?どんな助けでも大歓迎です!

敬具、スウェーデン

答えて

1

ただ、すべての行が、ステータスこれが働くだろう"COMPLETE"

SELECT id 
FROM status  
GROUP BY id 
HAVING count(id) = count(CASE WHEN status = 'COMPLETE' THEN 1 END) 
0

の 王子私がしようとするだろう:

SELECT id 
FROM status 
WHERE status = 'COMPLETE' 
GROUP BY id 
+2

このコードは、なぜおよび/またはどのようにこのコードは質問がその長期的な価値を向上回答に関する追加のコンテキストを提供し、質問に答えるかもしれないが。 –

0

を持っていることを確認するための検証を追加。この考え方は、ステータス=完了の行を第1段階として選択することです。次に、テーブルに同じIDの別のステータスがあるかどうかを確認するフェーズです(<>完了)。 これは、完了のステータスが1つしかない場合にのみ反復を返します。

declare @table table (id integer, status varchar(max)) 
insert into @table select 12,'complete' 
insert into @table select 12,'fail' 
insert into @table select 11,'complete' 

select ID, status 
from @table t1 
where not exists (select 1 from @table t2 where t2.id =t1.id and t1.status <> t2.status) 
and t1.status = 'complete' 
関連する問題