SQL Server中使用ROW_NUMBER()时相同标识符如何保持编号一致
解决方案
你使用的ROW_NUMBER()窗口函数会为每一行生成唯一的连续序号,即便排序字段NumRegOper的取值相同,也会分配不同的序号,因此无法实现同标识符共享相同序号的需求。
你可以使用DENSE_RANK()窗口函数实现预期效果,对应SQL语句如下:
select DENSE_RANK() OVER (order by NumRegOper desc) as NewOrder , * from #tmp
函数逻辑说明
SQL Server的三类排序窗口函数逻辑区别如下:
ROW_NUMBER():所有行生成唯一连续序号,同排序值也会生成不同序号RANK():同排序值生成相同序号,后续不同值的序号会跳空,比如2行相同值排第1后,下一个不同值的序号为3DENSE_RANK():同排序值生成相同序号,后续不同值的序号连续递增,比如2行相同值排第1后,下一个不同值的序号为2,完全匹配你的需求
执行上述修改后的语句,得到的结果就和你贴出的预期结果完全一致。
内容的提问来源于stack exchange,提问作者Andres Delzo
相关产品推荐
相关产品推荐

