这里的行列转换都是在presto语法下可编译实现(hive、sql会有一些差别)

Sql语句:数据行转列(表a-to-表b)和 列转行(表b-to-表a)

Sql(presto语法) 实现行转列和列转行

 

1.行转列(sql语句)

select country,
SUM(CASE WHEN cnt_cut = ‘(0,20]‘THEN cnt ELSE 0 END) AS one,
SUM(CASE WHEN cnt_cut = ‘(20,600]’THEN cnt ELSE 0 END) AS two,
SUM(CASE WHEN cnt_cut =’(600,++]’THEN cnt ELSE 0 END) AS three
FROM a
GROUP BY country

Result: 表b

 

2.列转行(sql语句)

select b1.country,b2.cut,b2.cnt from b as b1

cross join unnest(

     array[‘one’,’two’,’three’],

     array[one,two,three]

) b2 (cut,cnt)

   Result : 表a

说明:这两个行转列和列转行都是 presto实现,亲自测试正确

 

  

       

相关文章: