[英]SQL Select distinct rule out a row based on value
我現在面臨一些挑戰。 我有下表:
| ID | STATUS |
12 COMPLETE
12 FAIL
11 COMPLETE
我需要選擇的是狀態完整的唯一ID。 如果狀態為“失敗”,則我不希望看到該ID返回給我。
我已經試過了:
select distinct id where status = 'COMPLETE'
這返回到我所有行,因為ID 12的狀態在一行上完成。 我希望它不返回該行,因為12也有一個失敗(我只想返回給定ID的所有狀態均為“ COMPLETE”的行)。
有人對此有任何指示嗎? 任何幫助是極大的贊賞!
最好的問候,瑞典王子
只需添加驗證以確保所有行的狀態均為"COMPLETE"
SELECT id
FROM status
GROUP BY id
HAVING count(id) = count( CASE WHEN status = 'COMPLETE' THEN 1 END )
我會嘗試:
SELECT id
FROM status
WHERE status = 'COMPLETE'
GROUP BY id
這會起作用。 想法是選擇status = complete的行作為第一階段。 然后第二階段是驗證表中是否存在同一ID的其他狀態,該狀態是<>而不是完成。 這意味着它將僅返回只有一個完成狀態的迭代。
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'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.