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

时间:2016-03-09 14:48:01

标签: sql sql-server sql-update identity

我刚在SQL表中创建了一个列(Priority)。 我希望能够设置一次UPDATE,为该AgendaType的每种类型的类型设置每个当前优先级单元的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

这是我可以做的吗?如果是这样,任何有关此的帮助或建议将不胜感激。先谢谢你。

1 个答案:

答案 0 :(得分:1)

以下是使用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

这会为每组agendatype和genre创建一个行号。然后update是微不足道的。