按订单数量显示行数

时间:2017-11-01 16:27:02

标签: sql oracle

我有下表

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

2 个答案:

答案 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部分只是为了模拟原始数据表。

也许这可以帮助您找到答案。