【SQL解惑】谜题11:工作顺序

本文介绍了一种SQL查询方法,用于找出所有工作订单中仅第0道工序已完成,而其他非0工序均处于等待状态的工作订单。通过三种不同的SQL实现方式,包括使用子查询、CASE表达式与聚合函数,来高效地解决这一特定的查询需求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

解惑一:
1、创建表并插入数据
create table Projects
(
workorder_id char(5) not null,
step_nbr integer not null check (step_nbr between 0 and 1000),
step_status char(1) not null
      check (step_status in ('C','W')),
      primary key (workorder_id,step_nbr)
)
insert into Projects(workorder_id,step_nbr,step_status)
values('AA100',0,'C'),
('AA100',1,'W'),
('AA100',2,'W'),
('AA200',0,'W'),
('AA200',1,'W'),
('AA300',0,'C'),
('AA300',1,'C')
2、实际上要找到的工序即是第0道工序为为完成Complete,其他非0工序为Waiting
select workorder_id
  from Projects as p1
 where step_nbr = 0
   and step_status = 'C'
   and 'W' = ALL(select step_status
                           from Projects as p2
                          where step_nbr <> 0
                            and p1.workorder_id = p2.workorder_id)
解惑二:
1、当第0道工序为Complete和非0工序为Waiting时则等于1,当工序的累加=Count函数时则证明满足
select workorder_id
from Projects
group by workorder_id
having SUM(case         
              when step_nbr <> 0 and step_status = 'W' then 1
              when step_nbr = 0 and step_status = 'C' then 1
              else 0 end) = COUNT(step_nbr)
解惑三:
1、方法一
select workorder_id
      from Projects
      group by workorder_id
      having COUNT(*) = COUNT(case when step_nbr = 0 and step_status = 'C'
                                          then 1
                                          else null end)
                              + COUNT(case when step_nbr <> 0 and step_status = 'W'
                                          then 1
                                          else null end )
2、方法二:利用了not null和check()约束
select workorder_id
from Projects
where step_status = 'C'
group by workorder_id
having SUM(step_nbr) = 0











评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值