如何在SQL Server中基于原ID分配连续整数ID
实现原ID替换为连续整数的查询语句(SQL Server 2019)
原表数据
| id | value |
|---|---|
| 15 | a |
| 15 | b |
| 18 | c |
| 19 | d |
| 20 | e |
| 20 | f |
需求说明
需要编写SELECT查询,将相同的原id替换为从1开始的连续整数,最终得到如下结果:
| id | value |
|---|---|
| 1 | a |
| 1 | b |
| 2 | c |
| 3 | d |
| 4 | e |
| 4 | f |
解决方案
在SQL Server 2019中,使用DENSE_RANK()窗口函数即可实现需求。该函数会为相同的分组值分配相同的排名,且排名是连续不跳跃的,完全匹配需求。
查询语句如下:
SELECT DENSE_RANK() OVER (ORDER BY id) AS id, value FROM 你的表名;
将语句中的你的表名替换为实际的表名称即可执行。
结果说明
DENSE_RANK() OVER (ORDER BY id)会根据原id的排序,为每个不同的原id分配连续的整数编号,相同原id的记录会得到相同的编号,与预期结果一致。
内容的提问来源于stack exchange,提问作者Kasun sunil
相关产品推荐
相关产品推荐

