sql server:带条件计数

dced5bon  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(336)

我有一张表,它显示了物品交付的状态:

ID     | ContractID  | State
----------------------------------
1      | 125         | Created
2      | 125         | Activated
3      | 125         | PickupStarted
4      | 125         | PickedUp
5      | 125         | DeliveryStarted
6      | 125         | Delivered
7      | 126         | Created
8      | 126         | Activated
9      | 126         | PickupStarted
10     | 126         | PickedUp
11     | 126         | DeliveryStarted
12     | 126         | Delivered
13     | 127         | Created
14     | 127         | Activated
15     | 127         | PickupStarted
16     | 127         | PickedUp

我想创建一个sql查询,它只统计那些尚未传递的“constractd”(只统计那些当前状态已达到“pickedup”状态的)。在这种情况下,这将是'收缩'127。有没有一种方法可以实现这种类型的count()?

3ks5zfa0

3ks5zfa01#

你可以用 not exists :

select count(distinct contractId)
from t
where not exists (select 1
                  from t t2
                  where t2.contractId = t.contractid and
                        t2.status not like 'Deliver%'
                 );

或者,如果你特别想 PickedUp 作为最后状态:

select count(*)
from t
where t.id = (select max(t2.id) from t t2 2here t2.contractid = t.contractid) and
      t.status = 'PickedUp';

两者是不同的。第二个是最后一个状态 PickedUp . 第一个是没有达到“交付”状态的人。

相关问题