在SQL中将数据从宽格式转换为长格式

时间:2015-04-22 09:03:26

标签: sql hive

我有一些格式的数据:

VAR1 VAR2 Score1 Score2 Score3
A     B    1      2      3

我需要将其转换为格式

VAR1 VAR2 VarName Value
 A     B  Score1   1
 A     B  Score2   2
 A     B  Score3   3

如何在SQL中执行此操作?

2 个答案:

答案 0 :(得分:4)

如果您的分数列已修复且您不需要聚合,则可以使用多个def _build_options(self, options): if type(options) == dict: for option in self._optionslist: if option in options: del options[option] return options SELECT语句生成您请求的数据形状。 E.g。

UNION ALL

SQL小提琴:http://sqlfiddle.com/#!6/f54b2/4/0

答案 1 :(得分:1)

在配置单元中,您可以将named_struct函数,array函数和explode函数与LATERAL VIEW构造

结合使用
SELECT VAR1, VAR2, var_struct.varname, var_struct.value FROM
(
  SELECT 
    VAR1, 
    VAR2, 
    array (
         named_struct("varname","Score1","value",Score1),
         named_struct("varname","Score2","value",Score2),
         named_struct("varname","Score3","value",Score3)
    ) AS struct_array1
  FROM OrignalTable
) t1 LATERAL VIEW explode(struct_array1) t2 as var_struct;