gpt4 book ai didi

sql - T-SQL 行号在 N 后重新启动

转载 作者:行者123 更新时间:2023-12-05 08:17:29 25 4
gpt4 key购买 nike

如何在一定数量的行后重新启动我的 Row_Number。

例如

我怎么转

ID  RowNumber
-------------
100 1
101 2
102 3
125 4
126 5
148 6
149 7
150 8
151 9

进入

ID  RowNumber
-------------
100 1
101 2
102 3
125 4
126 1
148 2
149 3
150 4
151 1

请注意,没有办法根据 ID 进行分区,那实际上是随机的。

我尝试使用递归 CTE 并且非常接近。

这个:

DECLARE @MyTable TABLE (ID INT, RowNumber INT)

INSERT INTO @MyTable (ID,RowNumber)
SELECT 100,1 UNION ALL
SELECT 101,2 UNION ALL
SELECT 102,3 UNION ALL
SELECT 125,4 UNION ALL
SELECT 126,5 UNION ALL
SELECT 148,6 UNION ALL
SELECT 149,7 UNION ALL
SELECT 150,8 UNION ALL
SELECT 151,9;

WITH CTE AS
(
SELECT ID,
RowNumber ,
1 AS Steps
FROM @MyTable
WHERE ID = 100

UNION ALL
SELECT M.ID ,
M.RowNumber +1,
CASE WHEN C.Steps = 4 THEN 0 ELSE C.Steps END +1 AS steps
FROM @MyTable M
INNER JOIN CTE C ON C.RowNumber = M.RowNumber

)
SELECT *
FROM CTE

返回:

ID  RowNumber
-------------
100 1 1
100 2 2
101 3 3
102 4 4
125 5 1
126 6 2
148 7 3
149 8 4
150 9 1
151 10 2

这与第一个 ID 非常接近。

任何帮助都会很棒。

谢谢,

最佳答案

使用模运算符:

select id, rownumber, 1 + ((rownumber - 1) % 4)
from table t;

如果rownumber不是列,也可以使用row_number()函数:

select id, row_number() over (order by id),
1 + ((row_number() over (order by id) - 1) % 4)
from table t;

关于sql - T-SQL 行号在 N 后重新启动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27538952/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com