首页 > 解决方案 > 根据另一列中的数据创建编号行 [ORACLE]

问题描述

我需要根据一列中的文本和另一列中的数字为多个行项目创建特定的“ID”。我基本上需要根据列中的数字复制行'n'次,并且每个复制行都有一个递增的数字作为ID。

原始数据看起来像这样:

PN    QTY
===   ===
ABC   1
DEF   3
GHI   1

我需要一个查询来返回一个如下所示的表:

ID       PN    QTY
===      ===   ===
ABC;1    ABC   1
DEF;1    DEF   3
DEF;2    DEF   3
DEF;3    DEF   3
GHI;1    GHI   1

我确信我可以在 SQL 查询运行后使用脚本迭代地执行此操作,但我想避免这种情况。谢谢!

标签: sqloracleselectrecursive-query

解决方案


一种选择使用递归查询:

with cte (pn, qty, n) as (
    select pn, qty, 1 from mytable where qty > 0
    union all
    select pn, qty, n + 1 from cte where n < qty
)
select pn, qty from cte order by pn

DB Fiddle 上的演示

PN | 数量
:-- | --:
美国广播公司 | 1
防御工事 | 3
防御工事 | 3
防御工事 | 3
全球健康指数 | 1

推荐阅读