Oracle查询实现:基于ORDER列与QTY列生成自定义序列
Oracle查询实现按QTY拆分生成序列值
以下两种方法均可实现需求,将每条记录按QTY值拆分成从1到QTY的序号,并生成ORDER值-序号格式的结果:
方法一:使用CONNECT BY和LEVEL伪列
利用Oracle层级查询功能,通过LEVEL伪列生成1到QTY的序号,同时通过PRIOR条件避免笛卡尔积:
SELECT "ORDER" || '-' || LEVEL AS NewSequence FROM your_table CONNECT BY LEVEL <= QTY AND PRIOR "ORDER" = "ORDER" AND PRIOR SYS_GUID() IS NOT NULL;
注意:
ORDER是Oracle关键字,如果你的列名确实为ORDER,需要用双引号包裹;若列名是其他非关键字名称,可直接使用列名。
方法二:使用递归CTE(WITH子句)
通过递归公共表表达式逐步生成序号,逻辑更直观:
WITH seq_generator AS ( SELECT "ORDER", QTY, 1 AS seq FROM your_table UNION ALL SELECT "ORDER", QTY, seq + 1 FROM seq_generator WHERE seq + 1 <= QTY ) SELECT "ORDER" || '-' || seq AS NewSequence FROM seq_generator ORDER BY "ORDER", seq;
说明
- 替换上述代码中的
your_table为你的实际表名 - 两种方法执行后都会得到期望的输出结果:
NewSequence 34905-1 34905-2 39754-1 39754-2 39754-3 39754-4 39754-5
内容的提问来源于stack exchange,提问作者Rajesh
相关产品推荐
相关产品推荐

