2017-05-25 107 views
0

我有一个表列:ID类型(用“IN”和“出”的字符串),并价值(持有货币数据)SQL运行总计修改

我需要得到总结和价值的减去,逻辑跟随每一行的平衡:

  • 如果类型=“在”然后总和值
  • 如果类型=“超出”,然后减去缬氨酸UE

我已经试过的东西,但我不能确定,只要有或缩小:

ID Type  Value and in balance like this Balance 
21 In  55        55 
22 IN  78        133 
23 Out  15        118 
24 Out  56        62 
25 In  72        134 
26 Out  5        129 

我有这样的代码:

SELECT ID , 
     Value , 
     (SELECT SUM(y.Value) 
      FROM  dbo.Reestr y 
      WHERE  y.ID <= x.ID 

     ) AS RunningTotal 
FROM dbo.Reestr x 
ORDER BY 1 ,2 ,3; 

回答

5

只需使用累积和功能。这是在SQL Server中可用2012+:

select r.id, r.value, 
     sum(case when r.type = 'in' then value 
       when r.type = 'out' then - value 
      end) over (order by r.id) as balance 
from dbo.Reestr r 
ORDER BY 1, 2, 3; 

你可以做同样的事情用一个相关子查询,通过在子查询中的case表达。

+0

凡子句组。它会抛出一个错误 – Ravi

+1

@Ravi。 。 。问题中的代码没有“group by”。数据也不表明需要。如果您有关于累积总和的问题,请提出问题。 –

+1

@ Gordon Linoff ....您正在使用聚合函数,您必须使用group by子句,因为Id不在聚合函数中。如果问题没有,那为什么他没有得到期望的结果, – Ravi

1

试试这个

SELECT ID , 
      Value , 
      (select sum(case when Type = 'IN' then Value 
          when Type='OUT' then (0-value) end) 
      FROM dbo.Reestr y where x.Id>=y.id) AS RunningTotal 
    FROM dbo.Reestr x 
    ORDER BY 1 ,2 ,3;