【发布时间】:2017-06-22 08:37:56
【问题描述】:
我查看了一些运行总示例的 SQL Server,但我无法管理这样的事情。
我有一个表,其中有列 id、名称、操作类型、日期、值。 我想计算每条记录的余额。余额应该这样计算:
起始余额必须为0,然后如果操作类型为IN,则为加号,如果为OUT,则为减号。每个下一条记录都应该看到上一条记录的余额,然后根据操作类型查看 +value 或 -value。
此操作应按日期(而不是 Id)排序。
例如,如果表格如下所示:
ID Name Op_Type Date Value
1 box Out 2017-05-13 15
2 table In 2017-04-31 65
3 box2 In 2017-05-31 65
那么结果应该是这样的
ID Name Op_Type Date Value Balance
2 table In 2017-04-31 65 65
1 box Out 2017-05-13 15 50
3 box2 In 2017-05-31 65 115
这段代码的结果:
select *,
sum(case when Op_Type = 'Out' then -Value else Value end)Over(Order by [Date]) as Balance
From Yourtable
是:
ID Date Type Value Balance
143 2016-12-31 In 980 664.75
89 2016-12-31 Out 300 664.75
90 2016-12-31 Out 80 664.75
但我希望得到以下结果:
ID Date Type Value Balance
143 2016-12-31 In 980 980
89 2016-12-31 Out 300 680
90 2016-12-31 Out 80 600
【问题讨论】:
-
请使用标点符号,这道题是一个长句,看不懂。你试过什么吗?网上有很多关于如何计算运行总计和条件聚合的教程。另外,你用的是哪个版本的sql-server?
-
这是用于什么平台的?是否适用于 RDBMS?
-
是的,我尝试过一些东西,但在大多数情况下,我在某些行中得到了错误的数字或类似的东西:/它不是用前一行计算
-
@Wuhu - 所有日期都相同。你期待的结果是什么/
-
0+980-300-80 这就是我想要的
标签: sql sql-server