我有一个包含列的表: ID , Type (使用' IN'' Out'字符串),以及价值(持有货币数据)
我需要按照以下逻辑,通过 Value 的求和来减去每一行的余额:
我尝试了一些东西,但我无法确定进出的位置:
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;
答案 0 :(得分: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
表达式,可以对相关子查询执行相同的操作。
答案 1 :(得分: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;