Измените последовательность с помощью SQL Query

Хотите выполнить последовательность с 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

Я хочу изменить столбец показа последовательности с идентификаторами 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

Так в чем проблема у вас здесь? Вы не задали вопрос, просто заявили, чего хотите, но не объяснили, почему вы не сделали то, что хотите (если вы знаете, кем должны быть, пожалуйста, сделайте это). Вы ищете кого-нибудь, кто напишет вам заявление `ОБНОВЛЕНИЕ`? что ты уже испробовал? SO не является бесплатной службой кодирования, поэтому, пожалуйста, помогите нам помочь вам и объясните, в чем проблема, покажите свои попытки и задайте вопрос, на который мы можем ответить. Спасибо.

Larnu 30.05.2019 08:48

Я могу использовать оператор обновления, но это займет много времени, так как записей много, просто хочу знать, есть ли какой-либо ярлык, с помощью которого я могу быстро их обновить.

Rahul Aggarwal 30.05.2019 08:53

Вам действительно нужно изменить данные? Или просто измените порядок, например. order by Seq desc?

Dale K 30.05.2019 08:54

На догадку: ROW_NUMBER?

Larnu 30.05.2019 08:55

@DaleBurrell Мне нужно изменить данные

Rahul Aggarwal 30.05.2019 08:59
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
5
36
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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, если это уместно.

Другие вопросы по теме