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

如何在SELECT语句中使相同名称的行拥有相同行号?

解决相同BENFNAME行号不一致的问题

你现在用的ROW_NUMBER()窗口函数,哪怕分区内排序字段完全相同,也会给每一行生成唯一的递增编号——这就是为啥相同BENFNAME的行号不一样的原因。要让同名的行拥有相同行号,把ROW_NUMBER()换成DENSE_RANK()或者RANK()就行:

修改后的SQL代码

方案1:全局统一行号(同名行号相同,不同名递增)

SELECT
    DENSE_RANK() OVER (ORDER BY BENFNAME DESC) AS ROWNUM
    , BENFNAME, BENLNAME
    , REMID, BENENATIONALITY 
    , CUSBENRELATION
FROM  SEND    
WHERE REMID = 445231

方案2:每个名称单独排号(所有同名行号都是1)

如果你需要每个BENFNAME分组内的行号都从1开始,也可以保留分区逻辑:

SELECT
    DENSE_RANK() OVER (PARTITION BY BENFNAME ORDER BY BENFNAME DESC) AS ROWNUM
    , BENFNAME, BENLNAME
    , REMID, BENENATIONALITY 
    , CUSBENRELATION
FROM  SEND    
WHERE REMID = 445231

三个窗口函数的核心区别

  • ROW_NUMBER():强制给每行分配唯一编号,哪怕排序字段完全相同,编号仍会递增
  • DENSE_RANK():给排序字段相同的行分配相同编号,编号连续不跳过(比如1、1、2、3)
  • RANK():给排序字段相同的行分配相同编号,但会跳过中间编号(比如1、1、3、4)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 17:50:28