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

解惑一:
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











  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值