You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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后,下一个不同值的序号为3
  • DENSE_RANK():同排序值生成相同序号,后续不同值的序号连续递增,比如2行相同值排第1后,下一个不同值的序号为2,完全匹配你的需求

执行上述修改后的语句,得到的结果就和你贴出的预期结果完全一致。

内容的提问来源于stack exchange,提问作者Andres Delzo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 02:15:02