如何在SQL中为重复值分组分配连续序号列
为相同ProductID分配连续相同序号的SQL解决方案
你当前使用的ROW_NUMBER()函数会为每一行生成唯一序号,哪怕ProductID重复也会递增,这不符合需求。要实现相同ProductID共用同一个序号,不同ProductID按顺序分配连续的下一个序号,应该使用DENSE_RANK()函数。
示例SQL语句
假设你的数据源表是Products,包含ProductID和其他业务字段,修改后的查询语句如下:
SELECT ProductID, -- 替换为你的实际字段名 ProductName, Price, DENSE_RANK() OVER (ORDER BY ProductID ASC) AS Number FROM Products;
函数差异说明
ROW_NUMBER():每行生成唯一序号,重复ProductID会得到不同序号,比如AMC对应1、2,NCR对应3、4RANK():重复ProductID会得到相同序号,但后续序号会跳过重复的计数,比如AMC对应1、1,NCR直接跳到3、3DENSE_RANK():重复ProductID共用同一序号,且后续序号连续递增,完全匹配你要的效果:AMC=1,NCR=2,MSO=3
内容的提问来源于stack exchange,提问作者Himanshu
相关产品推荐
相关产品推荐

