2015-04-22 39 views
2

我在格式一些数据:从宽幅转换数据,以长格式在SQL

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这样做?

+1

什么是'value'应该代表? – potashin

+0

请提供有关数据结构的更多信息。您是否已经发布了专栏名称或值的片段? “价值”从哪里来? –

+0

已做出更改。请检查 – Arc

回答

3

如果您的分数列是固定的,并且您不需要汇总,则可以使用多个SELECTUNION ALL语句生成您请求的数据的形状。例如。

SELECT [VAR1], [VAR2], [VarName] = 'Score1', [Value] = [Score1] 
FROM [dbo].[UnknownMe] 
UNION ALL 
SELECT [VAR1], [VAR2], [VarName] = 'Score2', [Value] = [Score2] 
FROM [dbo].[UnknownMe] 
UNION ALL 
SELECT [VAR1], [VAR2], [VarName] = 'Score3', [Value] = [Score3] 
FROM [dbo].[UnknownMe] 

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

1

在蜂巢,你可以使用named_struct功能,array功能,并与LATERAL VIEW会同explode功能构建

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; 
相关问题