Hive 使用sql的配置单元表转置操作

Hive 使用sql的配置单元表转置操作,hive,hiveql,Hive,Hiveql,我想使用配置单元QL转置表 这是下面的资源表 ___________________________________________ subject|roll_1|roll_2|roll_3|roll_4|roll_5| ___________________________________________ MATHS |80 | 90 | 78 | 95 | 68| ___________________________________________ ENGLISH

我想使用配置单元QL转置表 这是下面的资源表

___________________________________________
subject|roll_1|roll_2|roll_3|roll_4|roll_5|
___________________________________________
MATHS  |80    | 90   |   78 |   95 |    68|
___________________________________________
ENGLISH|78    | 78   | 67   |75    |54    |
subject|MATHS|ENGLISH|
______________________
roll_1 |80   |78     |
______________________
roll_2 |90   |78     |
______________________
roll_3 |78   | 67    |
______________________
roll_4 |95   |75     |
______________________
roll_5 |68   |54     |
我想要下表所示格式的答案

___________________________________________
subject|roll_1|roll_2|roll_3|roll_4|roll_5|
___________________________________________
MATHS  |80    | 90   |   78 |   95 |    68|
___________________________________________
ENGLISH|78    | 78   | 67   |75    |54    |
subject|MATHS|ENGLISH|
______________________
roll_1 |80   |78     |
______________________
roll_2 |90   |78     |
______________________
roll_3 |78   | 67    |
______________________
roll_4 |95   |75     |
______________________
roll_5 |68   |54     |

请帮我解决这个问题。

下面是获取所需输出的SQL

select 'roll_1' as subject,sum(case when subject='MATHS' then roll_1 else 0 end) maths,sum(case when subject='ENGLISH' then roll_1 else 0 end) english from your_table_2
union all
select 'roll_2' as subject,sum(case when subject='MATHS' then roll_2 else 0 end) maths,sum(case when subject='ENGLISH' then roll_2 else 0 end) english from your_table_2
union all
select 'roll_3' as subject,sum(case when subject='MATHS' then roll_3 else 0 end) maths,sum(case when subject='ENGLISH' then roll_3 else 0 end) english from your_table_2
union all
select 'roll_4' as subject,sum(case when subject='MATHS' then roll_4 else 0 end) maths,sum(case when subject='ENGLISH' then roll_4 else 0 end) english from your_table_2
union all
select 'roll_5' as subject,sum(case when subject='MATHS' then roll_5 else 0 end) maths,sum(case when subject='ENGLISH' then roll_5 else 0 end) english from your_table_2

这是我能做的最接近通用的,随着新列的添加,您只需在地图内部的CONCAT中进行更改:


虽然这可能会影响效率。

您使用的是哪一版本的hive?我使用的是hive 2.0,请给出一些通用解决方案。在这种情况下,使用此解决方案是可以的,但当我有一名lac学生时,情况会如何?此解决方案可能没有用处。您提供的数据表示为错误的数据模型,因为您为什么要添加一个额外的列而不是新行。另一种解决方案可以是,您必须使用数据挖掘和ETL的概念,然后您的数据将很容易以表格形式显示。请提供一些优化的解决方案不知道其他解决方案。我觉得你看起来很有活力。对不起的: