SQL返回行基于表

时间:2017-01-12 16:05:15

标签: sql sql-server

我有一张包含费用的表格。每项费用都有一个状态。当用户更改费用数量时,原始行将标记为“准备删除”(状态更改为“准备删除”),并创建一个新行,其中包含用户刚刚输入的数量。然后,此新行的状态为“付费”。主管需要验证费用变更,一旦他们执行一次,原始费用行的状态将更新为已删除。我要做的是修改费用。如果原始费用的状态为“准备删除”且新的费用状态为“付费”,则返回“准备删除”。当原始费用状态为已删除且新费用状态为付费时,请返回付费。我尝试过使用

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

但那是错的。非常感谢任何指导我正确方向的帮助。

谢谢:)

1 个答案:

答案 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;