У меня есть таблица SQL Server, в которой есть записи с одним полем, представляющим собой число, которое мне нужно перенумеровать в новую таблицу. Кроме того, в нем есть столбец идентификаторов, который будет повторяться в записях при многократном использовании. Я хотел бы отсортировать таблицу по полю идентичности, затем спуститься по полю номера, затем с помощью курсора пронумеровать первую запись (1), следующую запись (2) и т. Д., Пока поле идентичности не изменится, а затем повторить.
У меня есть следующие поля: load_number (identity), stop_type, stop_number
Данные будут выглядеть так:
load_number - stop_type - stop_number
1234 ------------------ 1 ------------------- 1
1234 ------------------ 2 ------------------- 5
1234 ------------------ 2 ------------------- 4
1234 ------------------ 2 ------------------- 3
1234 ------------------ 2 ------------------- 2
1234 ------------------ 2 ------------------- 1
У меня есть другие поля, которые описывают каждую строку более подробно, но мне нужно, чтобы вышеупомянутые 5 стали 1, 4 стали 2, 3 остались 3, 2 стали 4 и 1 стали 5 (так что переверните числа полностью ) эти цифры могут доходить до 10.
DECLARE @lead_key int = 1, @load_number int, @stop_type, @stop_number, @stopnum
CREATE TABLE #renumber
(load_number int, stop_type int, stop_number int)
DECLARE stop_cursor CURSOR FAST_FORWARD FOR
select load_number, stop_type, stop_number
from sometable
order by load_number, stop_type, stop_number desc
OPEN stop_cursor
FETCH NEXT from stop_cursor
INTO @load_number, @stop_type, @stop_number
while @@FETCH_STATUS = 0
BEGIN
If @load_key = 1
BEGIN
SET @load_key = @load_number --initialize @load_key for first record
END
If @load_key = @load_number
BEGIN
If @stop_type = 2
BEGIN
insert into #renumber
select @load_number, @stop_type, @stopnum --use @stopnum counter
SET @stopnum = @stopnum + 1
END
ELSE
BEGIN
insert into #renumber
select @load_number, @stop_type, @stop_number --use @stop_number
SET @stopnum = 1 --reset @stopnum to 1
END
END
ELSE
SET @load_key = @load_number
SET @stopnum = 1
END
FETCH NEXT from stop_cursor
INTO @load_number, @stop_type, @stop_number
CLOSE stop_cursor;
DEALLOCATE stop_cursor;
Этот запрос зацикливается и никогда не заканчивается, моя способность к отладке не работает на моем ПК, поэтому я не могу пройти через это, чтобы увидеть, где он зацикливается, поэтому я решил спросить здесь, как мне получить то, что я есть находясь в поиске. Спасибо за любую помощь!