我有一张包含费用的表格。每项费用都有一个状态。当用户更改费用数量时,原始行将标记为“准备删除”(状态更改为“准备删除”),并创建一个新行,其中包含用户刚刚输入的数量。然后,此新行的状态为“付费”。主管需要验证费用变更,一旦他们执行一次,原始费用行的状态将更新为已删除。我要做的是修改费用。如果原始费用的状态为“准备删除”且新的费用状态为“付费”,则返回“准备删除”。当原始费用状态为已删除且新费用状态为付费时,请返回付费。我尝试过使用
select ISNULL(b.StatusId, c.StatusId) id
from (
select *
from FeeItem
where Status = Paid) b
left join (
select *
from FeeItem
where Status = Ready For Delete) c
on b.FormId = c.FormId
但那是错的。非常感谢任何指导我正确方向的帮助。
谢谢:)
答案 0 :(得分:0)
试试这个:
Select *
From (Select
t.*,
Row_number() over (partition by formid
order by Case status
when 'ready for delete' then 1
when 'paid' then 2 else 3 end) rn
From feeitem t) t
Where rn = 1;