如何为相同business_code生成统一自增列值?SQL求助
解决SQL中为相同business_code分配唯一递增数值的问题
问题说明
需求:新创建的列中,相同business_code对应相同的自增数值,不同business_code对应唯一的递增编号。
尝试的SQL语句:
select * , rank() over (partition by business_code order by ID) from table
当前问题:使用上述语句后,每个business_code分组的新列初始值均为1,不符合预期。
当前输出示例:
| Id | businesscode | NewColumn |
|---|---|---|
| 1 | eng | 1 |
| 2 | mkr | 1 |
| 3 | eng | 2 |
| 4 | fin | 1 |
| 5 | mkr | 2 |
预期输出:每个不同的business_code对应唯一递增数值,相同business_code的NewColumn值一致:
| Id | businesscode | NewColumn |
|---|---|---|
| 1 | eng | 1 |
| 2 | mkr | 2 |
| 3 | eng | 1 |
| 4 | fin | 3 |
| 5 | mkr | 2 |
解决方案
你需要的是对business_code进行全局分组编号,而非分组内的排名。可以使用DENSE_RANK()函数(无重复business_code时用RANK()效果一致),去掉PARTITION BY子句,改为按business_code排序:
select * , dense_rank() over (order by business_code) as NewColumn from table
补充说明
DENSE_RANK()会为每个不同的business_code分配唯一的递增整数,相同的business_code会得到相同编号,且编号连续(即使存在重复business_code也不会跳过数字)。- 若你的
business_code无重复值,用RANK()也能得到预期结果,但DENSE_RANK()在有重复场景下更贴合“连续递增”的需求。
内容的提问来源于stack exchange,提问作者codetech
相关产品推荐
相关产品推荐

