Sql 基于另一列中的数据创建编号行[ORACLE]

Sql 基于另一列中的数据创建编号行[ORACLE],sql,oracle,select,recursive-query,Sql,Oracle,Select,Recursive Query,我需要根据一列中的文本和另一列中的数字为多个行项目创建特定的“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

我需要根据一列中的文本和另一列中的数字为多个行项目创建特定的“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查询运行后使用脚本迭代地执行此操作,但我希望避免这种情况。谢谢

一个选项使用递归查询:

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
:


谢谢@GMB!我没有听说过递归查询,但很高兴我现在听说了!给了我我所需要的。 PN | QTY :-- | --: ABC | 1 DEF | 3 DEF | 3 DEF | 3 GHI | 1