SQL查询,以特定的格式结构数据

问题描述 投票:0回答:1

我有一个如下格式的数据。

ID month subid val1 val2
1  200411 a     10   20
1  200411 b     15   25 
2  200411 x     9    12  
2  200411 y     15   30
2  200411 z     50   11

请你告诉我如何写一个查询,将其转换为下面的格式。

ID month subid  val1_1 val1_2 val1_3  val2_1  val2_2 val3_3 
1  200411 a,b   10     15     null    20      25     null
2  200411 x,y,z 9      15     50      12      30     11

如果你有问题,请告诉我。非常感谢!!

sql hive
1个回答
1
投票

一种方法是条件聚合。

select id, month, collect_set(subid) as subids,
       max(case when seqnum = 1 then val1 end) as val1_1,
       max(case when seqnum = 2 then val1 end) as val1_2,
       max(case when seqnum = 3 then val1 end) as val1_3,
       max(case when seqnum = 1 then val2 end) as val2_1,
       max(case when seqnum = 2 then val2 end) as val2_2,
       max(case when seqnum = 3 then val2 end) as val2_3
from (select t.*, row_number() over (partition by id order by subid) as seqnum
      from t
     ) t
group by id;

collect_set() 返回一个数组。 这似乎比字符串更有用,但如果你愿意的话,你可以把它转换为字符串表示。

© www.soinside.com 2019 - 2024. All rights reserved.