2015-04-22 32 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; 
相關問題