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)
没有循环/光标,有没有办法做到这一点?如果循环/光标是唯一的方法,最有效的代码是什么?
谢谢
一种方法是使用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)