ここでローカル変数ソリューションの更新を確認することをお勧めします:http://geekswithblogs.net/Rhames/archive/2008/10/28/calculating-running-totals-in-sql-server-2005 --- the-optimal.aspx
DECLARE @SalesTbl TABLE (DayCount smallint, Sales money, RunningTotal money)
DECLARE @RunningTotal money
SET @RunningTotal = 0
INSERT INTO @SalesTbl
SELECT DayCount, Sales, null
FROM Sales
ORDER BY DayCount
UPDATE @SalesTbl
SET @RunningTotal = RunningTotal = @RunningTotal + Sales
FROM @SalesTbl
SELECT * FROM @SalesTbl
他のすべての方法よりも優れていますが、行の順序が保証されているかどうかについて疑問があります。ただし、一時テーブルにインデックスが付けられている場合は正常に機能しているようです。
- ネストされたサブクエリ9300ミリ秒
- 自己参加6100ミリ秒
- カーソル400ミリ秒
- ローカル変数140ミリ秒に更新