我需要一個更快的方法來計算和顯示運行總和。SQL運行總和爲MVC應用程序
這是一個MVC telerik網格,它查詢使用子查詢生成運行總和的視圖。查詢需要73秒才能完成,這是不可接受的。 (每用戶點擊「刷新預測表」的時候,它需要73秒重新填充網格。)
查詢看起來是這樣的:
SELECT outside.EffectiveDate
[omitted for clarity]
,(
SELECT SUM(b.Amount)
FROM vCI_UNIONALL inside
WHERE inside.EffectiveDate <= outside.EffectiveDate
) AS RunningBalance
[omitted for clarity]
FROM vCI_UNIONALL outside
「EFFECTIVEDATE」對某些項目都可以改變時間...可以添加新項目等。我當然需要一些可以動態計算運行總和(當刷新按鈕被擊中時)。存儲過程或另一個視圖...?請指教。
解決方案:(一個許多,這是一個數量級比子查詢更快)
創建中除RunningTotal
山坳視圖所有列的新表。創建一個首先截斷表的存儲過程,然後INSERT INTO
該表使用SELECT
所有列,沒有運行總和列。
使用更新的局部變量的方法:
DECLARE @Amount DECIMAL(18,4)
SET @Amount = 0
UPDATE TABLE_YOU_JUST_CREATED SET RunningTotal = @Amount, @Amount = @Amount + ISNULL(Amount,0)
創建將運行每天一次的存儲過程任務代理。所有報告均使用TABLE_YOU_JUST_CREATED
。
謝謝,我會看那篇文章。我想我不能幹淨地使用CTE,因爲它是我查詢的視圖。該視圖查詢4,5個表以獲取項目,因爲它們的公共標識col是「EffectiveDate」列,這當然可以有差距。 – Kyle
你使用Denali還是2008(或更早的版本)? –
我正在使用2008 R2。 – Kyle