Row_Number()、偏移、Fetch_Next 和重新开始编号

问题描述 投票:0回答:1

我有以下内容

  • 列出项目 A 页眉表格
  • 列出项目 A 页面内容表格
  • 列出项目 items

我有一个循环在 pageheader 中创建标头记录,然后单独的插入从 items 表中获取接下来的 25 条记录并插入到 pagecontent 表中。

循环的下一次迭代必须重置 pagecontent 表中的 itemnumber 的编号。

这基本上都是有效的,我无法开始工作的是要重置的编号。

这是我要创建的页面内容的数据。

行ID 标头 ID 商品编号 商品代码
1 1 1 00010
2 1 2 01002
2 1 3 01612
... ... ... ...
2 1 25 01701
2 2 1 00427

简化的插入

( RowID
, HeaderID
, ItemID
, ItemCode
)
SELECT 
 ROW_NUMBER() OVER(ORDER BY RowID) + (SELECT ISNULL(MAX(RowID), 0) FROM pagecontent) 
,@headerid
,ROW_NUMBER() OVER(ORDER BY RECORDID)
,ITEMCODE
FROM ITEMS
ORDER BY ITEMCODE
OFFSET @start ROWS
FETCH NEXT 25 ROWS ONLY;

因为 ROW_NUMBER 是在 FETCH NEXT 工作之前对 ITEMS 中的所有行进行编号。当我希望 ItemID 为 1(因为新页面已开始)时,我得到了 RowID 26、ItemID 26。

有没有办法重置编号,或者之后运行更新来重新编号?

我目前已采取运行更新来纠正。

我刚刚意识到在写这篇文章时我可以使用一个 CASE,如果偏移量大于零,则从数字中减去偏移量。

谢谢。

sql regex t-sql row-number
1个回答
0
投票

(行ID , 标头ID , 物品ID , 项目代码 ) 选择 ROW_NUMBER() OVER(ORDER BY RowID) + (SELECT ISNULL(MAX(RowID), 0) FROM 页面内容) ,@headerid ,ROW_NUMBER() OVER(按记录排序) ,项目代码 来自项目 按商品代码订购 偏移量@start ROWS 仅获取下 25 行;enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.