要与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
答案 0 :(得分: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
进行订购。