Хотите выполнить последовательность с 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
Я могу использовать оператор обновления, но это займет много времени, так как записей много, просто хочу знать, есть ли какой-либо ярлык, с помощью которого я могу быстро их обновить.
Вам действительно нужно изменить данные? Или просто измените порядок, например. order by Seq desc
?
На догадку: ROW_NUMBER
?
@DaleBurrell Мне нужно изменить данные
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
, если это уместно.
Так в чем проблема у вас здесь? Вы не задали вопрос, просто заявили, чего хотите, но не объяснили, почему вы не сделали то, что хотите (если вы знаете, кем должны быть, пожалуйста, сделайте это). Вы ищете кого-нибудь, кто напишет вам заявление `ОБНОВЛЕНИЕ`? что ты уже испробовал? SO не является бесплатной службой кодирования, поэтому, пожалуйста, помогите нам помочь вам и объясните, в чем проблема, покажите свои попытки и задайте вопрос, на который мы можем ответить. Спасибо.