如何更改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的任何其他数字)。