Sql-Server-2008-R2

動態計算值

  • April 4, 2018

我需要使用它的先前值* 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 $$.

引用自:https://dba.stackexchange.com/questions/148303