需要一些tSQL Wizardry:基于Running Total的SQL Update

Joh*_*nFx 5 t-sql sql-server-2008

我有一个实现,使用超级毛茸茸的递归CTE,真的很难遵循/维护.我希望SO上的一个大脑可以提出一些更简单的tSQL方法代码来完成以下任务:

表文件

DocID    SortOrder    PageCount    StartPgNum   EndPgNum
5        1            2               {1}          {2}
8        2            7               {3}          {9}
22       3            3               {10}         {12}
Run Code Online (Sandbox Code Playgroud)

对于上面给出的表,我需要一个查询来填充StartPgNum和EndPgNum({}中的示例中包含的示例值,以使我的需要更清楚.

假设:
*DocID,SortOrder和PageCount已预先填充.
*StartPgNum和EndgNum需要由tSQL代码填充.
*SortOrder始终从1开始,并且是连续的,没有间隙.
*文档应按照SortOrder的顺序获得连续页面编号方案

Tim*_*uri 4

更新得更好:)

DECLARE @temp TABLE (DocID INT, SortOrder INT, PageCount INT)

INSERT INTO @temp VALUES (5, 1, 2)
INSERT INTO @temp VALUES (8, 2, 7)
INSERT INTO @temp VALUES (22, 3, 3)

SELECT
    *,
    StartPgNum + PageCount-1 AS EndPgNum
FROM
(SELECT
    DocID,
    SortOrder,
    PageCount,
    ISNULL((SELECT SUM(PageCount)+1 FROM @temp WHERE SortOrder < parent.SortOrder), 1) AS StartPgNum
FROM
    @temp parent) _temp
Run Code Online (Sandbox Code Playgroud)