首页 > 解决方案 > 以特定格式构造数据的 SQL 查询

问题描述

我有以下格式的数据。

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

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

标签: sqlhive

解决方案


一种方法是条件聚合:

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()返回一个数组。这似乎比字符串更有用,但如果您愿意,可以将其转换为字符串表示形式。


推荐阅读