具有相同 ID 号但不同状态值的多行 - 我如何 select 出特定状态以获取 ID

Multiple rows with same ID number but different status values - How do I select out specific statuses to grab IDs

我有一个带有 ID 字段和状态字段的 table,状态字段可以有多种状态类型,例如 "active" "finaled" "fail" "comments"。我希望能够 select 在没有与许可证编号相关联的 "finaled" 状态或者没有至少四个 "active" 状态的情况下排除许可证编号。我知道我需要使用 COUNT() 但我不知道如何按许可证号过滤它。

table 最终标记 permitnum 777 的示例:

PermitNum Status  
222       active  
222       active  
222       finaled  
444       active  
444       active  
444       active  
444       active  
777       active  
777       fail  
777       active  
777       active  

我一直在使用 COUNT() 来获取基于 WHERE 子句的状态字段的通用计数,但我不知道如何将其与许可编号联系起来。

您可以使用 not exists 并通过 having count(case when Status='active' then 1 end)<4 限制您的下一个条件:

select PermitNum 
  from tab t
 where not exists ( select 0 from tab where status='finaled' and PermitNum = t.PermitNum  )
 group by PermitNum
having count(case when Status='active' then 1 end)<4

Demo

您可以使用条件聚合。要获取被标记的值:

select permitno
from t
group by permitno
having sum(case when status = 'finaled' then 1 else 0 end) > 0 and
       sum(case when status = 'active' then 1 else 0 end) < 4;

要获得 "good" 许可:

select permitno
from t
group by permitno
having sum(case when status = 'finaled' then 1 else 0 end) = 0 or
       sum(case when status = 'active' then 1 else 0 end) >= 4;