设想下表(称为 TestTable
) :
id somedate somevalue
-- -------- ---------
45 01/Jan/09 3
23 08/Jan/09 5
12 02/Feb/09 0
77 14/Feb/09 7
39 20/Feb/09 34
33 02/Mar/09 6
我想要一个查询,返回一个按日期顺序运行的总数,如:
id somedate somevalue runningtotal
-- -------- --------- ------------
45 01/Jan/09 3 3
23 08/Jan/09 5 8
12 02/Feb/09 0 8
77 14/Feb/09 7 15
39 20/Feb/09 34 49
33 02/Mar/09 6 55
我知道 SQL Server 2000/2005/2008中有 做这件事的各种方法。
我对这种使用聚合集语句技巧的方法特别感兴趣:
INSERT INTO @AnotherTbl(id, somedate, somevalue, runningtotal)
SELECT id, somedate, somevalue, null
FROM TestTable
ORDER BY somedate
DECLARE @RunningTotal int
SET @RunningTotal = 0
UPDATE @AnotherTbl
SET @RunningTotal = runningtotal = @RunningTotal + somevalue
FROM @AnotherTbl
... 这是非常有效的,但是我听说在这方面存在一些问题,因为你不能保证 UPDATE
语句将以正确的顺序处理行。也许我们可以得到一些关于这个问题的确切答案。
但是也许人们可以提出其他的建议?
编辑: 现在使用带有设置和上面的“更新技巧”示例的 SqlFiddle