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)有两个核心问题:
PARTITION BY (col1+col2)会把所有Col1+Col2组合相同的行归到同一个分区,不管Col1是否不同——比如如果有Col1=1 Col2=A和Col1=2 Col2=A,它们会被分到同一分区,行号不会随Col1变化重置。ROW_NUMBER()会给分区内的每一行分配唯一编号,哪怕行的Col1+Col2组合完全相同,也会得到不同的行号,这和你“相同组合用相同行号”的要求矛盾。
运行正确的SQL后,就能得到你期望的输出结果了。
内容的提问来源于stack exchange,提问作者Mags
相关产品推荐
相关产品推荐

