我不明白这个代码的bug
ID AccountID Quantity
1 1 10 Sum = 10
2 1 5 = 10 + 5 = 15
3 1 2 = 10 + 5 + 2 = 17
4 2 7 = 7
5 2 3 = 7 + 3 = 10
SELECT ID, AccountID, Quantity,
SUM(Quantity) OVER (PARTITION BY AccountID ) AS TopBorcT,
FROM tCariH
好像你所期望的查询返回运行总和,但它必须给你的两个分区相同的值AccountID
。
为了获得与运行总计SUM() OVER ()
你需要添加一个ORDER BY
后子条款PARTITION BY …
,就像这样:
SUM(Quantity) OVER (PARTITION BY AccountID ORDER BY ID)
但要记住,并不是所有的数据库系统支持ORDER BY
中OVER
一个窗口集合函数的条款。 (例如,SQL服务器不支持它,直到最新版本的SQL Server 2012)
如果您使用的是SQL 2012,你应该尝试
SELECT ID,
AccountID,
Quantity,
SUM(Quantity) OVER (PARTITION BY AccountID ORDER BY AccountID rows between unbounded preceding and current row ) AS TopBorcT,
FROM tCariH
如果有的话,有效期限栏以便更好。
查询会是这样:
SELECT ID, AccountID, Quantity,
SUM(Quantity) OVER (PARTITION BY AccountID ) AS TopBorcT
FROM #Empl ORDER BY AccountID
通过类似的组作品分区。 在这里,我们用的AccountID组合,这样一笔钱是对应于帐户ID。
首先第一种情况下,帐户ID = 1,则总和(数量)= 10 + 5 + 2 => 17&对于帐户ID = 2,则总和(数量)= 7 + 3 => 10
这样的结果会出现像附着快照 。