Oracle数据库下相同ID对应相同行号的重复行编号实现咨询
Oracle实现相同ID对应统一行号的可行方案
方案1:使用DENSE_RANK分析函数(首推)
这是最简洁高效的实现方式,Oracle 8i及以上版本都支持,生成的行号连续递增,相同ID的行号完全一致。
示例代码:
SELECT id, -- 其他业务字段 DENSE_RANK() OVER(ORDER BY id) AS row_num FROM 你的表名;
方案2:使用RANK分析函数
如果接受非连续行号(比如3条ID=1的记录行号都是1,下一个不同ID的行号直接是4),可以用该方案:
SELECT id, -- 其他业务字段 RANK() OVER(ORDER BY id) AS row_num FROM 你的表名;
方案3:去重ID关联赋值(兼容超老版本)
如果使用的是不支持分析函数的极低版本Oracle,可以通过先给去重ID编号再关联原表的方式实现:
SELECT t1.id, -- t1的其他业务字段 t2.row_num FROM 你的表名 t1 JOIN ( SELECT id, ROWNUM AS row_num FROM (SELECT DISTINCT id FROM 你的表名 ORDER BY id) ) t2 ON t1.id = t2.id;
方案选型建议
- 无特殊要求优先选方案1,性能最优写法最简单,符合绝大多数业务场景的编号需求
- 仅需要行号和实际记录行数对齐时选方案2
- 仅8i以前的超老版本Oracle用方案3
内容的提问来源于stack exchange,提问作者Vilius Gaidelis
相关产品推荐
相关产品推荐

