Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何将聚合数据“解组”到行?_Sql_Impala - Fatal编程技术网

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

Sql 如何将聚合数据“解组”到行?,sql,impala,Sql,Impala,我有一个具有类似模式的表: 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

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

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

我尝试过一些工会和案例陈述,但没有一个能不费吹灰之力就给我带来想要的结果

解决这个问题的方法是生成一个数字列表,然后加入其中:

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

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

基本上,您需要一个序列号。如果您的桌子足够大,您可以直接使用:

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;
如果表不够大,可能会有一个数字表或更大的表潜伏在周围。否则,可以使用联接构造一个