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的顺序获得连续页面编号方案
更新得更好:)
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)
| 归档时间: |
|
| 查看次数: |
588 次 |
| 最近记录: |