我需要计算基于种子行的列,其中每行的值使用“前一”行的值。我觉得这应该是一个递归查询,但我不能完全理解它。
为了显示:
BOP EOP IN OUT Wk_Num
--------------------------------------
6 4 10 12 1
? ? 2 6 2
? ? 7 5 3
... ... ... ... ...
Run Code Online (Sandbox Code Playgroud)
因此下一行的 BOP 和 EOP 列需要使用种子行进行计算。IN 和 OUT 值已存在于表中。
BOP =(上一行的 EOP)
EOP =(上一行的 EOP)+ IN - OUT [其中 IN 和 OUT 来自当前行)
此示例的输出应如下所示:
BOP EOP IN OUT Wk_num
-------------------------------------
6 4 10 12 1
4 0 2 6 2
0 2 7 5 3
2 6 4 0 4
... ... ... ... ...
Run Code Online (Sandbox Code Playgroud)
您可以为此使用递归 CTE;
WITH RecursiveCTE AS (
-- Base Case
SELECT
BOP,
EOP,
[IN],
[OUT],
[WK_Num]
FROM [someTable]
WHERE BOP IS NOT NULL
UNION ALL
SELECT
r.EOP AS BOP,
r.EOP + r2.[In] - r2.[Out] AS EOP,
r2.[IN],
r2.[OUT],
r2.[WK_Num]
FROM [someTable] r2
INNER JOIN [RecursiveCTE] r
ON r2.[Wk_Num] = r.[Wk_Num] + 1
)
SELECT * FROM RecursiveCTE
Run Code Online (Sandbox Code Playgroud)
这是一个 SQL 小提琴:http://sqlfiddle.com/#!18/ e041f/1
您基本上将基本情况定义为第一行(通过说 BOP != null 的行),然后使用 Wk_Num + 1 连接连接到接下来的每一周,并引用前面的行值