首页 > 解决方案 > 使用带有 ORDER BY 的 SQL Server 查找累积总和

问题描述

试图计算一个给定数字的累积总和。需要按 2 列订购:交货,日期。

询问:

SELECT Date, Delivery, Balance, SUM(Balance) OVER ( ORDER BY Delivery, Date) AS cumsum
FROM t

结果:

Contract_Date   Delivery    Balance cumsum
2020-02-25  2020-03-01  308.100000  308.100000
2020-03-05  2020-03-01  -2.740000   305.360000
2020-03-06  2020-04-01  176.820000  682.180000
2020-03-06  2020-04-01  200.000000  682.180000
2020-03-09  2020-04-01  300.000000  1082.180000
2020-03-09  2020-04-01  100.000000  1082.180000
2020-03-13  2020-04-01  129.290000  1211.470000
2020-03-16  2020-04-01  200.000000  1711.470000
2020-03-16  2020-04-01  300.000000  1711.470000
2020-03-17  2020-04-01  300.000000  2011.470000
2020-04-01  2020-04-01  86.600000   2098.070000
2020-04-03  2020-04-01  200.000000  2298.070000

预期成绩:

Contract_Date   Delivery    Balance cumsum
25/2/2020   1/3/2020    308.1   308.1
5/3/2020    1/3/2020    -2.74   305.36
6/3/2020    1/4/2020    176.82  482.18
6/3/2020    1/4/2020    200     682.18
9/3/2020    1/4/2020    300     982.18
9/3/2020    1/4/2020    100     1082.18
13/3/2020   1/4/2020    129.29  1211.47
16/3/2020   1/4/2020    200     1411.47
16/3/2020   1/4/2020    300     1711.47
17/3/2020   1/4/2020    300     2011.47
1/4/2020    1/4/2020    86.6    2098.07
3/4/2020    1/4/2020    200     2298.07

版本: Microsoft SQL Server 2017

标签: sqlsql-servertsqlwindow-functionssql-server-2017

解决方案


您需要在ORDER BY子句中添加第三列来打破和 的Contract_Date联系Delivery。您将使用哪一个并不明显。这是使用 column 的一个选项Balance

SELECT 
    Date, 
    Delivery, 
    Balance, 
    SUM(Balance) OVER ( ORDER BY Delivery, Contract_Date, Balance) AS cumsum
FROM t

推荐阅读