嗨我有一张有ID和状态的表。一个ID可以有多个状态,但我必须根据条件选择状态。
如果ID 1已批准,则稍后,已修改我应选择已批准,如果ID仅批准,则仅选择已批准。但我得到的案例陈述不是按ID进行。它正在根据状态更改整体数据。请指教
select ID,
CASE
WHEN status = 'Approved'
AND status IN(
'Modified',
'Later'
) THEN 'Partial Modified'
WHEN status = 'Approved' THEN 'Approved'
when status IN('Modified','Edited') THEN 'Modified'
else status
END status group by ID,Status
答案 0 :(得分:0)
这可以通过row_number
中的订购条件来完成。
select top 1 with ties *
from tbl
order by row_number() over(partition by id order by case when status='Approved' then 1
when status='Modified' then 2
else 3 end)
答案 1 :(得分:0)
我认为你想要一个聚合,所以像这样:
(CASE WHEN SUM(CASE WHEN status = 'Approved' THEN 1 ELSE 0 END) > 0
THEN 'Approved'
WHEN SUM(CASE WHEN status = 'Modified' THEN 1 ELSE 0 END) > 0
THEN 'Modified'
ELSE MAX(status)
END)
当然,您也可以使用窗口函数执行此操作:
(CASE WHEN SUM(CASE WHEN status = 'Approved' THEN 1 ELSE 0 END) OVER (PARTITION BY id) > 0
THEN 'Approved'
WHEN SUM(CASE WHEN status = 'Modified' THEN 1 ELSE 0 END) OVER (PARTITION BY id) > 0
THEN 'Modified'
ELSE MAX(status) OVER (PARTITION BY id)
END)