具有相同 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
您可以使用条件聚合。要获取被标记的值:
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;
我有一个带有 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
您可以使用条件聚合。要获取被标记的值:
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;