这里的行列转换都是在presto语法下可编译实现(hive、sql会有一些差别)
Sql语句:数据行转列(表a-to-表b)和 列转行(表b-to-表a)
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实现,亲自测试正确