Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL根据表中的值返回行_Sql_Sql Server - Fatal编程技术网

SQL根据表中的值返回行

SQL根据表中的值返回行,sql,sql-server,Sql,Sql Server,我有一张包含费用的桌子。每个费用都有一个状态。当用户更改费用的数量时,原始行标记为准备删除(状态更改为准备删除),并使用用户刚刚输入的数量创建新行。然后,该新行的状态为“已支付”。主管需要验证费用更改,一旦更改一次,原始费用行的状态将更新为已删除。我想做的是当一笔费用被修改时。如果原始费用的状态为“准备删除”,而新费用的状态为“已支付”,则返回“准备删除”。当原始费用状态被删除且新费用状态已支付时,返回已支付的费用。我试过使用 select ISNULL(b.StatusId, c.Status

我有一张包含费用的桌子。每个费用都有一个状态。当用户更改费用的数量时,原始行标记为准备删除(状态更改为准备删除),并使用用户刚刚输入的数量创建新行。然后,该新行的状态为“已支付”。主管需要验证费用更改,一旦更改一次,原始费用行的状态将更新为已删除。我想做的是当一笔费用被修改时。如果原始费用的状态为“准备删除”,而新费用的状态为“已支付”,则返回“准备删除”。当原始费用状态被删除且新费用状态已支付时,返回已支付的费用。我试过使用

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
但这是错误的。非常感谢为我指明正确方向的任何帮助

谢谢:)

试试这个:

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;

样本数据和预期输出在这里会很有帮助。请提供它们好吗?字符串常量应该用单引号引起来。此外,样本数据和预期结果也会有所帮助。