簡體   English   中英

SQL根據值選擇不同的排除行

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM