我有下表
NAME quantity
a 5
b 3
c 2
我需要编写一些oracle sql(only)查询,它将输出以下内容:
NAME quantity
a 1
a 1
a 1
a 1
a 1
b 1
b 1
b 1
c 1
c 1
答案 0 :(得分:1)
with
row_num as (select rownum i from dual connect by level <= (select max(quantity) quantity from tab))
select NAME, QUANTITY from tab join row_num on row_num.i <= tab.quantity
order by 1
CTO查询提供网格(第1行到最大quantity
)。使用它来加入限制数量的表格。
答案 1 :(得分:0)
好吧,我不是甲骨文家伙,但我发现这个问题很有意思。我更喜欢PostgreSQL。如果您知道Oracle相当于PostgreSQL的generate_series
函数,那么解决方案可能如下所示:
SELECT
X.name,
1
FROM (
SELECT
T.name,
generate_series(1, T.quantity)
FROM
unnest(ARRAY[('a'::char, 5), ('b'::char, 3), ('c'::char, 2)]) AS T(name char(1), quantity integer)
) AS X;
unnest
部分只是为了模拟原始数据表。
也许这可以帮助您找到答案。