如何更改MS SQL列中的值排名
我有一个表,其中有一列定义了显示位置的秩值:如何更改MS SQL列中的值排名,sql,sql-server,Sql,Sql Server,我有一个表,其中有一列定义了显示位置的秩值: Unid | Rank | Name 10 | 1 | A 20 | 2 | B 30 | 3 | C 40 | 4 | D 50 | 5 | E 如何更新表,使名称E位于列表顶部,后面紧跟A、B、C、D名称?一种可能的解决方案是使用行编号()和适当的ORDER by子句: 表: CREATE TABLE Data ( [Unid] int, [Rank] int, [Name]
Unid | Rank | Name
10 | 1 | A
20 | 2 | B
30 | 3 | C
40 | 4 | D
50 | 5 | E
如何更新表,使名称E位于列表顶部,后面紧跟A、B、C、D名称?一种可能的解决方案是使用
行编号()
和适当的ORDER by
子句:
表:
CREATE TABLE Data (
[Unid] int,
[Rank] int,
[Name] varchar(1)
)
INSERT INTO Data ([Unid], [Rank], [Name])
VALUES
(10, 1, 'A'),
(20, 2, 'B'),
(30, 3, 'C'),
(40, 4, 'D'),
(50, 5, 'E')
声明:
UPDATE d
SET d.[Rank] = d.[NewRank]
FROM (
SELECT
[Rank],
ROW_NUMBER() OVER (ORDER BY CASE WHEN [Name] = 'E' THEN 0 ELSE 1 END, [Name]) AS [NewRank]
FROM Data
) d
结果:
Unid Rank Name
10 2 A
20 3 B
30 4 C
40 5 D
50 1 E
一个选项是按ABS排序(符号(秩-5)),秩,无需更新。您为什么假设并暗示秩的任何特定值具有排序以外的任何意义?只需将E的值设置为0(或小于A的任何其他数字)。