Sql-Server-2008-R2
動態計算值
我需要使用它的先前值* ColumnX 來計算一個值
這是公式:
DividendReinvested = “以前的股息再投資” * (1+ValuationPercChange/100)
我可以在沒有循環的情況下執行此操作嗎?CTE 可能嗎?使用 SQL Server 2008 R2。
這是樣本數據。我使用 RowNum 作為唯一標識符來從前一行設置目前行。
我在這裡找到了這個“執行總計”CTE 範例(您應該能夠根據自己的需要調整它)。注意 MAXRECURSION https://stackoverflow.com/questions/11310877/calculate-running-total-running-balance
DECLARE @Tbl TABLE (RowNum INT,Columnx INT) INSERT INTO @Tbl (RowNum,Columnx) VALUES (1,100) INSERT INTO @Tbl (RowNum,Columnx) VALUES (2,200) INSERT INTO @Tbl (RowNum,Columnx) VALUES (3,300) ; WITH x AS ( SELECT RowNum ,Columnx ,RunningTotal = Columnx FROM @tbl WHERE RowNum = 1 UNION ALL SELECT y.RowNum ,y.Columnx ,x.RunningTotal + y.Columnx FROM x INNER JOIN @tbl AS y ON y.RowNum = x.RowNum + 1 ) SELECT RowNum ,columnx ,RunningTotal FROM x ORDER BY rownum OPTION (MAXRECURSION 10000);
您是否嘗試即時執行此操作(每次插入記錄時)或作為已存在記錄的一次性操作(並追溯)?
如果您正在為所有現有記錄執行此操作,我會說這樣的事情可能會起作用,但是您必須在游標或其他東西中執行它才能按順序執行:
UPDATE [table_curr] SET [table_curr].[DividendReinvested] = [table_prev].[DividendReinvested] * (1+([Table_Prev].[ValuationPercChange]/100)) FROM [table] AS [table_curr] INNER JOIN [table] AS [table_prev] ON [table_curr].[RowNum]-1 = [table_prev].[RowNum] WHERE [table_curr].[RowNum] <> 1
在執行此之前,您需要自己做第一行,以確保至少有一個好的
$$ DividendReinvested $$價值,但我認為其餘的都會起作用。 我能想到的最好的類比是它與更新
$$ Manager_name $$使用現有的員工表中的欄位$$ Reports_To_Id $$這與$$ Employee_ID $$.