HIVE SQL 多行转多列&多列转多行

多行转多列

#创建新表
create table t1
(a integer comment "年份",
b string comment "部门",
c integer comment "绩效得分");
#向表中插入数据
insert into t1
(a,b,c)
values
(2014,"B",9),(2015,"A",8),(2014,"A",10),(2015,"B",7);

表预览如下:
在这里插入图片描述
现需要将该表多行转多列,转后的效果如下:
在这里插入图片描述
实现代码:

select
t1.a,
max(case when t1.b="A" THEN t1.c end) col_a,
max(case when t1.b="B" then t1.c end) col_b
 from t1
 group by t1.a;

多列转多行

在上文的基础上,将多行转多列的结果作为源表,多列转多行。

#建表
create table t1_2
(a integer comment "年份", 
col_a integer comment "col_a",
col_b integer comment "col_b");
#向表中插入数据
insert into t1_2
select
t1.a as a,
max(case when t1.b="A" THEN t1.c end) as col_a,
max(case when t1.b="B" then t1.c end) as col_b
 from t1
 group by t1.a;
#多列转多行
 select a,b,c
 from
 (
 select a,"A" as b,col_a as c from t1_2 
 union all
  select a,"B" as b,col_b as c from t1_2 
  )  temp;

猜你喜欢

转载自blog.csdn.net/p1306252/article/details/123408345