Как перезапустить мой Row_Number после определенного количества строк.Номер строки строки T-SQL после N
E.g.
Как я могу превратить
ID RowNumber
-------------
100 1
101 2
102 3
125 4
126 5
148 6
149 7
150 8
151 9
INTO
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.
Любая помощь будет отличной.
Спасибо,
Will
Ах, что идеально! Настолько проще спасибо! –