2017-05-25 111 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;