基于前一行结果的SQL计算 - 递归

时间:2017-12-18 14:31:25

标签: sql sql-server common-table-expression lag recursive-query

我试图在SQL中进行计算,而我正在努力解决这个问题。

以下是创建我正在使用的示例的代码

CREATE TABLE #temptable ( [AccountNo] bigint, [Month] int, 
[PaymentCycle] int, [OpeningBal] decimal(2,2), [Issue] decimal(13,2), 
[Collections] decimal(38,2), [Rebates] decimal(38,2), [ClosingBal] 
decimal(38,2) )

INSERT INTO #temptable
VALUES
( 1, 201703, 0, 0.00, 100.00, 0.00, 0.00, 100.00 ), 
( 1, 201704, 1, NULL, 0.00, -31.60, 0.00, NULL ), 
( 1, 201705, 2, NULL, 0.00, 0.00, 0.00, NULL ), 
( 1, 201706, 3, NULL, 0.00, 0.00, 0.00, NULL ), 
( 1, 201707, 4, NULL, 0.00, -60.00, 0.00, NULL ), 
( 1, 201708, 5, NULL, 0.00, -78.00, 0.00, NULL ), 
( 1, 201709, 6, NULL, 0.00, 0.00, 0.00, NULL ), 
( 1, 201710, 7, NULL, 0.00, 0.00, 0.00, NULL ), 
( 1, 201711, 8, NULL, 0.00, 0.00, 0.00, NULL )

在这个例子中,我知道第一行(付款周期0)的值是什么,因此可以手动输入这些值,对于我需要进行3次计算的所有后续行。

1)OpeningBal - 这是前几行关闭图的LAG

2)收入 - 计算为OpeningBal x 20%

3)ClosingBal - 此值是行中所有组件的总和,所以

OpeningBal + Revenue + Issue + Collections + Rebates 

我能够使用LAG功能在付款周期1中实现此目的但是我想循环并将之前的期末余额存储在内存中以便在下一个周期中使用 - 我已经阅读了递归CTE& #39;但我正在努力实施。

非常感谢任何帮助。

此致 内森

编辑:在

下添加了所需的结果

Result Image

0 个答案:

没有答案