tsql - 设置顺序值而不循环/光标

Stu*_*ing 5 sql t-sql sql-server group-by

我需要在数据表中设置一个非唯一标识符.这将是一个组内的顺序即.对于每个组,ID应从1开始,并以1的增量上升,直到该组的最后一行.

这由下表说明."新ID"是我需要填充的列.

Unique ID  Group ID  New ID
---------  --------  ------
1          1123      1
2          1123      2
3          1124      1
4          1125      1
5          1125      2
6          1125      3
7          1125      4
Run Code Online (Sandbox Code Playgroud)

没有循环/光标,有没有办法做到这一点?如果循环/光标是唯一的方法,最有效的代码是什么?

谢谢

Bri*_*ter 6

一种方法是使用ROW_NUMBER() OVER(PARTITION BY ... ORDER BY ...)在一个UPDATE...FROM声明以subquery中FROM clause.

update MyTable set NewID = B.NewID
from
MyTable as A
inner join (select UniqueID, ROW_NUMBER() over (partition by GroupID order by UniqueID) as NewID from MyTable) as B on B.UniqueID = A.UniqueID
Run Code Online (Sandbox Code Playgroud)