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

如何在SQL中基于多字符串列生成唯一row_number,现有写法取值重复

基于多字符串列生成唯一ROW_NUMBER的解决方案

原有写法的问题

  • 核心错误:添加了PARTITION BY子句,该子句的作用是将数据按指定规则分组,每个分组内的ROW_NUMBER都会从1开始重新计数,天然就会出现不同分组序号重复的情况,无法生成全局唯一值
  • 潜在错误:直接拼接三个字符串作为分区/排序依据,会出现误判情况,比如Marker1='ab', Marker2='c'和Marker1='a', Marker2='bc'拼接结果完全相同,会被错误分到同一个分区
  • 排序逻辑无效:同一个分区内所有行的分区键完全相同,用相同的值作为排序依据,数据库无法确定行的先后顺序,返回的序号是随机不稳定的

解决方案

场景1:需要全局唯一的序号(所有行的ROWNUMBER值不重复)

直接去掉PARTITION BY子句,排序时直接指定三个字段依次排序即可:

ROW_NUMBER() OVER(
    ORDER BY [Marker1], [Marker2], [Marker3] DESC
) ROWNUMBER

场景2:需要同三列组合内的唯一序号(相同三列值的行按序编号,不同组合可重复)

修改分区规则和排序规则,避免拼接错误:

ROW_NUMBER() OVER(
    PARTITION BY [Marker1], [Marker2], [Marker3]
    ORDER BY [Marker1], [Marker2], [Marker3] DESC
) ROWNUMBER

如果需要同一组合内的序号也是全局唯一的,可以在排序条件中额外加入表内的其他唯一标识字段。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 15:24:01