pivot是一个非常实用的函数
PIVOT的格式:
SELECT [原表字段1,2,3…] FROM [表名]
AS [原表别名]
PIVOT( [聚合函数] ( [原表字段1] ) FOR [原表字段2] IN ( [原表2值1],[原表字段2值2]… ) ) AS [新表别名]
但是hive里面没有自带pivot函数,所以我们需要自己实现
首先创建一组数据
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | CREATE TABLE IF NOT EXISTS pivot_test( id INT ,province STRING ,time STRING ,gdp INT ) COMMENT 'pivot_test'; INSERT INTO pivot_test VALUES (1,'山东省','q1',10), (2,'山东省','q2',12), (3,'山东省','q3',15), (4,'山东省','q4',19), (5,'浙江省','q1',12), (6,'浙江省','q2',15), (7,'浙江省','q3',18), (8,'浙江省','q4',20); SELECT * FROM pivot_test ; |
数据如下

实现过程
1 2 3 4 5 6 7 8 | SELECT province ,SUM(IF(time='q1',gdp,NULL)) q1 ,SUM(IF(time='q2',gdp,NULL)) q2 ,SUM(IF(time='q3',gdp,NULL)) q3 ,SUM(IF(time='q4',gdp,NULL)) q4 FROM pivot_test GROUP BY province ; |
最终结果
| province | q1 | q2 | q3 | q4 |
|---|---|---|---|---|
| 山东省 | 10 | 12 | 15 | 19 |
| 浙江省 | 12 | 15 | 18 | 20 |
当然如果列目比较多的话,就会比较麻烦