将排名插入 SQL table

INSERT a RANK into a SQL table

我有一个包含以下列的 table:

NAME (VARCHAR) 
FISHING (INT) 
SAILING (INT) 
NAVIGATION (INT) 
SALARY (NUMERIC) 

这个table有9行数据。我使用 ALTER 添加了一个列,该列将包含此人薪水的 rank。它被称为SALARY_RANK。我的想法是用 SELECT 语句填充该列,以填充该排名。我尝试使用 INSERT 和下面的 SELECT 语句来填充该列,但它最终创建了 9 个新行,其中除了新列之外的所有行都是 NULL

解决此问题的最佳方法是什么?

这是我为新专栏写的SQL:

ALTER TABLE #CODY_CREW 
ADD  SALARY_RANK INT;

INSERT INTO #CODY_CREW (SALARY_RANK)
    SELECT 
       DENSE_RANK() OVER (ORDER BY SALARY) AS 'SALARY_RANK'
    FROM #CODY_CREW

这就是当我 运行 时发生的情况:

NAME                                               FISHING     SAILING     NAVIGATION  SALARY                                  SALARY_RANK
-------------------------------------------------- ----------- ----------- ----------- --------------------------------------- -----------
Amy                                                3           5           1           46000                                   NULL
Bill                                               1           2           5           43000                                   NULL
Carl                                               3           4           2           47000                                   NULL
Dan                                                4           3           1           36000                                   NULL
Eva                                                4           2           2           43000                                   NULL
Fred                                               1           3           4           55000                                   NULL
Greg                                               3           1           5           68000                                   NULL
Henry                                              5           4           2           64000                                   NULL
Ida                                                3           3           3           60000                                   NULL
NULL                                               NULL        NULL        NULL        NULL                                    1
NULL                                               NULL        NULL        NULL        NULL                                    2
NULL                                               NULL        NULL        NULL        NULL                                    2
NULL                                               NULL        NULL        NULL        NULL                                    3
NULL                                               NULL        NULL        NULL        NULL                                    4
NULL                                               NULL        NULL        NULL        NULL                                    5
NULL                                               NULL        NULL        NULL        NULL                                    6
NULL                                               NULL        NULL        NULL        NULL                                    7
NULL                                               NULL        NULL        NULL        NULL                                    8

(18 rows affected)

您应该使用 UPDATE 而不是 INSERT 查询。像下面这样尝试。

UPDATE C1
SET C1.SALARY_RANK = C2.SALARY_RANK
FROM #CODY_CREW C1
JOIN (SELECT 
   DENSE_RANK() OVER (ORDER BY SALARY) AS 'SALARY_RANK', Name
FROM #CODY_CREW) C2
ON C1.Name = C2.Name

在 SQL 服务器中,您可以使用可更新的 CTE 或子查询:

WITH toupdate AS (
      SELECT cc.*, DENSE_RANK() OVER (ORDER BY SALARY) AS NEW_SALARY_RANK
      FROM #CODY_CREW cc
     )
UPDATE toupdate
    SET SALARY_RANK = NEW_SALARY_RANK;

不需要JOIN