Изменить последовательность с помощью SQL-запроса - PullRequest
0 голосов
/ 30 мая 2019

Хотите выполнить последовательность запросов SQL. Есть ли более короткий способ обновить его, или я должен обновить всю таблицу.

Моя таблица выглядит следующим образом:

DECLARE @tab TABLE (ID INT IDENTITY, Name VARCHAR(10), Seq INT)

INSERT INTO @tab VALUES('A',1),('B',1),('C',1),('D',3),('E',4),('F',5),('G',6),('H',7),('I',8)

SELECT * FROM @tab ORDER BY Seq

Я хочу изменить столбец шоу последовательности с ID 7, 8, 9 вверху. Мой желаемый результат должен быть

DECLARE @tab TABLE (ID INT IDENTITY, Name VARCHAR(10), Seq INT)

INSERT INTO @tab VALUES('A',4),('B',5),('C',6),('D',7),('E',8),('F',9),('G',1),('H',2),('I',3)
SELECT * FROM @tab ORDER BY Seq

1 Ответ

1 голос
/ 30 мая 2019

ROW_NUMBER ваш друг здесь, просто нужно вычислить 2 разных в зависимости от точки разрыва имени.

;WITH RowNumbers AS
(
    SELECT 
        T.ID,
        RegularRowNumber = 3 + ROW_NUMBER() OVER (ORDER BY T.Name),
        AfterGRowNumber = -6 + ROW_NUMBER() OVER (ORDER BY T.Name),
        T.Seq,
        T.Name
    FROM 
        @tab AS T
)
UPDATE R SET
    Seq = CASE WHEN R.Name >= 'G' THEN AfterGRowNumber ELSE RegularRowNumber END
FROM
    RowNumbers AS R

Результат:

ID  Name    Seq
1   A       4
2   B       5
3   C       6
4   D       7
5   E       8
6   F       9
7   G       1
8   H       2
9   I       3

Возможно, стоит рассмотреть возможность использованияID на заказ вместо Name, если необходимо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...