MS SQL 更新每种类型的编号 (ID)

MS SQL Update Numbers (ID) for each Type

我刚刚在 SQL table 中创建了一个列(优先级)。 我希望能够设置一次性更新,为该议程类型的每种流派类型的每个当前优先单元设置 ID。

我在网上无休止地搜索,但似乎找不到我要找的东西。

例如,我的更新将导致以下结果:

AgendaType | Genre | Priority
-------------------------------
Rock         Red     1
Rock         Red     2
-------------------------------
Rock         Blue    1
Rock         Blue    2
Rock         Blue    3
Rock         Blue    4
Rock         Blue    5
-------------------------------
Rock         Green   1
Rock         Green   2
Rock         Green   3
Rock         Green   4
-------------------------------
Rap          Red     1
Rap          Red     2
Rap          Red     3
Rap          Red     4
-------------------------------
Rap          Blue    1
Rap          Blue    2
-------------------------------
Rap          Green   1
Rap          Green   2
Rap          Green   3

这是我能做的吗?如果有任何帮助或建议,我们将不胜感激。在此先感谢您。

这是一个使用 row_number()common-table-expression 的选项:

with cte as (
    select AgendaType, 
           Genre, 
           Priority,
           row_number() over (partition by AgendaType, Genre order by AgendaType) rn
    from yourtable
) 
update cte
set priority = rn

这会为每组议程类型和流派创建一个行号。那么 update 是微不足道的。