如何根据变量复制值
How to duplicate values based on an variable
所以作为背景,我的公司是 运行 一场比赛。客户购买的单位数量决定了他们参加比赛的数量。
我们必须向其提供列表的数据合作伙伴想要一个包含所有具有重复值的帐号的列表,以确定一个人有多少条目。
所以基本上,我有一个包含 ACCOUNT_NBR 和 UNITS 的数据集。
如果客户 12345 有 6 个单位,我希望他们的帐号在最终数据集中出现 6 次。
抱歉,如果这没有意义,如果需要,我们很乐意澄清。
从 Oracle 12 开始,您可以使用:
SELECT account_nbr
FROM table_name t
CROSS JOIN LATERAL (
SELECT LEVEL FROM DUAL CONNECT BY LEVEL <= t.units
)
Oracle 12之前,您可以使用:
SELECT account_nbr
FROM table_name t
CROSS JOIN TABLE(
CAST(
MULTISET(
SELECT LEVEL FROM DUAL CONNECT BY LEVEL <= t.units
) AS SYS.ODCINUMBERLIST
)
)
其中,对于示例数据:
CREATE TABLE table_name (account_nbr, units) AS
SELECT 1111, 3 FROM DUAL UNION ALL
SELECT 2222, 1 FROM DUAL UNION ALL
SELECT 3333, 4 FROM DUAL UNION ALL
SELECT 4444, 2 FROM DUAL;
双输出:
ACCOUNT_NBR
1111
1111
1111
2222
3333
3333
3333
3333
4444
4444
db<>fiddle here
所以作为背景,我的公司是 运行 一场比赛。客户购买的单位数量决定了他们参加比赛的数量。
我们必须向其提供列表的数据合作伙伴想要一个包含所有具有重复值的帐号的列表,以确定一个人有多少条目。
所以基本上,我有一个包含 ACCOUNT_NBR 和 UNITS 的数据集。 如果客户 12345 有 6 个单位,我希望他们的帐号在最终数据集中出现 6 次。
抱歉,如果这没有意义,如果需要,我们很乐意澄清。
从 Oracle 12 开始,您可以使用:
SELECT account_nbr
FROM table_name t
CROSS JOIN LATERAL (
SELECT LEVEL FROM DUAL CONNECT BY LEVEL <= t.units
)
Oracle 12之前,您可以使用:
SELECT account_nbr
FROM table_name t
CROSS JOIN TABLE(
CAST(
MULTISET(
SELECT LEVEL FROM DUAL CONNECT BY LEVEL <= t.units
) AS SYS.ODCINUMBERLIST
)
)
其中,对于示例数据:
CREATE TABLE table_name (account_nbr, units) AS
SELECT 1111, 3 FROM DUAL UNION ALL
SELECT 2222, 1 FROM DUAL UNION ALL
SELECT 3333, 4 FROM DUAL UNION ALL
SELECT 4444, 2 FROM DUAL;
双输出:
ACCOUNT_NBR 1111 1111 1111 2222 3333 3333 3333 3333 4444 4444
db<>fiddle here