sql - 根据另一列中的数据创建编号行 [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 查询运行后使用脚本迭代地执行此操作,但我想避免这种情况。谢谢!
解决方案
一种选择使用递归查询:
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
PN | 数量 :-- | --: 美国广播公司 | 1 防御工事 | 3 防御工事 | 3 防御工事 | 3 全球健康指数 | 1
推荐阅读
- sharepoint - Sharepoint Web 部件视图
- android - 单击时展开 SearchView 并使菜单项消失
- scala - 在 spark、cassandra、scala 中选择嵌套字段无法按预期工作
- java - 构建 docker 映像时出错,无法在项目上执行目标 org.springframework.boot:spring-boot-maven-plugin:2.5.2:build-image (default-cli)
- vue.js - 使用vue获取输入中的图像数据?
- android - Android Kotlin 中的 Webhook Listener 库?
- java - 读取嵌套 XML 结构以获取值
- python - 如何锁定主线程?
- excel - 我的循环不只使用选定的工作表
- python - 使用 `pandas.concat()` 完成 `A.merge(B).merge(C).merge(D) ....`