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を使用