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

SQL添加行号需求:相同Col1+Col2值对应相同行号的实现问题

解决按Col1分组、Col1+Col2相同行号一致的问题

你需要的是在每个Col1分组内,对Col2的唯一组合(即Col1+Col2相同的行)分配重复且连续的行号,同时Col1切换时行号重置。你的原SQL在分区逻辑和编号函数选择上有问题,我们来调整一下:

正确的SQL语句

SELECT 
  Col1, 
  Col2, 
  DENSE_RANK() OVER (PARTITION BY Col1 ORDER BY Col2) AS RowNo
FROM Table1;

为什么这个方案能满足需求?

  • PARTITION BY Col1:把数据按Col1的值拆分成独立分组,确保每次Col1变化时,行号会从1重新计数,完美匹配你的第一条规则。
  • DENSE_RANK():在同一个Col1分组内,会给相同Col2值(也就是Col1+Col2组合相同的行)分配相同的行号,同时为不同的Col2值分配连续递增的编号,完全符合第二条规则。

原SQL的问题分析

你原来的语句row_number() over(partition by (col1+col2) order by col1)有两个核心问题:

  1. PARTITION BY (col1+col2)会把所有Col1+Col2组合相同的行归到同一个分区,不管Col1是否不同——比如如果有Col1=1 Col2=A和Col1=2 Col2=A,它们会被分到同一分区,行号不会随Col1变化重置。
  2. ROW_NUMBER()会给分区内的每一行分配唯一编号,哪怕行的Col1+Col2组合完全相同,也会得到不同的行号,这和你“相同组合用相同行号”的要求矛盾。

运行正确的SQL后,就能得到你期望的输出结果了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:50:33