Oracle中不使用GROUP BY子句,如何基于列值生成分组行号
解决方案:Oracle分组生成组内行号
你的需求是按ROOT字段分组,为每个分组内的CHILD生成连续递增的行号。不需要使用递归查询(你的原SQL误用了CONNECT BY,而你的数据本身不存在层级递归关系),直接用Oracle的分析函数ROW_NUMBER()即可实现:
SELECT CHILD, ROOT, ROW_NUMBER() OVER (PARTITION BY ROOT ORDER BY CHILD) AS ROWNO FROM my_data ORDER BY ROOT, ROWNO;
代码说明:
PARTITION BY ROOT:将数据按ROOT字段拆分独立分组,每个分组单独计算行号ORDER BY CHILD:指定分组内的排序规则,确保行号按CHILD的顺序生成(若需要其他排序逻辑,替换CHILD为目标字段即可)- 末尾的
ORDER BY ROOT, ROWNO是为了让结果按ROOT分组展示,与你预期的输出格式完全匹配
执行以上SQL后,会得到你需要的结果:每个ROOT下的CHILD从1开始依次编号,分组内序号连续递增。
内容的提问来源于stack exchange,提问作者codeplex
相关产品推荐
相关产品推荐

