sql—如何将聚合数据“解组”到行?

uyto3xhc  于 2021-06-26  发布在  Impala
关注(0)|答案(2)|浏览(331)

我有一个具有类似模式的表:

basket_id | product | volume
101       | apple   | 3
102       | apple   | 2
102       | orange  | 2

我正在尝试将表“解组”或“取消聚合”为以下内容。
期望输出:

basket_id | product | volume
101       | apple   | 1
101       | apple   | 1
101       | apple   | 1
102       | apple   | 1
102       | apple   | 1
102       | orange  | 1
102       | orange  | 1

我试过一些工会和案件陈述,但没有一个能给我想要的结果。

drkbr07n

drkbr07n1#

基本上,你需要一个序列号。如果您的table足够大(如您的情况),您可以直接使用它:

with n as (
      select row_number() over (order by basket_id) as n
      from t
     ) t
select t.basket_id, t.product, 1 as volume
from t join
     n
     on n.n <= t.volume;

如果表不够大,可能会有一个数字表或更大的表隐藏在周围。否则,您可以用 join s。

xqnpmsa8

xqnpmsa82#

解决这个问题的方法是生成一个数字列表,然后将其合并:

select basket_id, product, 1
from mytable t
inner join (
    select 1 n union all select 2 union all select 3
) x on t.volume <= x.n

您可以扩展 unioned 根据需要使用更多数字的子查询。

相关问题