在Sql Server中,我有一个简单的表来存储金额和余额,如下所示:
ID | Date | Amount | Balance
-------------------------------------
101 | 1/15/2017 | 3.00 | 67.50
102 | 1/16/2017 | 5.00 | 72.50
103 | 1/19/2017 | 9.00 | 81.50
104 | 1/20/2017 | -2.00 | 79.50
如果我更改了记录的数量,我需要更新该记录后的所有余额。
ID | Date | Amount | Balance
-------------------------------------
101 | 1/15/2017 | 3.00 | 67.50
102 | 1/16/2017 | *5.02* | *72.52*
103 | 1/19/2017 | 9.00 | *81.52*
104 | 1/20/2017 | -2.00 | *79.52*
到目前为止,我在此表中拥有超过1亿条记录。要做这项工作,我不想使用sql游标或客户端程序,它会提交大量的Update语句并需要几个小时才能完成。 是否可以在一个sql语句中重新计算整个表的余额?
答案 0 :(得分:0)
您可以使用SUM()OVER。
在单个SQL语句中轻松完成例如
WITH tot as (select ID, SUM(Amount) as balance OVER (order by ID)
UPDATE Tab
SET Balance = t.Balance
FROM YOURTABLE tab
JOIN Tot
ON tot.id = tab.id
如果余额被任何其他列重置,则将其用作分区依据,并包含在连接中。 现在,如果要插入新行,只需使用where子句运行此更新查询。