在一定数量的行之后,如何重新启动我的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()功能:
rownumber
row_number()
select id, row_number() over (order by id), 1 + ((row_number() over (order by id) - 1) % 4) from table t;