SQL Pivot问题

时间:2017-10-19 18:23:22

标签: sql sql-server sql-server-2008

我有以下数据:

Year January Feb March April
2017  20     15  7     25

是否可以将数据格式化为

Year Month  Value

 - 2017 January 20 
 - 2017 Feb     15 
 - 2017 March   7 
 - 2017 April   25

非常感谢你的帮助。我一直在努力实现这个好几个小时,但我无法做到。

2 个答案:

答案 0 :(得分:2)

这是unpivot,但我更喜欢使用apply

select v.*
from t outer apply
     (values (t.year, 'January', t.January),
             (t.year, 'Feb', t.Feb),
             (t.year, 'March', t.March),
             (t.year, 'April', t.April)
     ) v(year, month, value);

apply实现了一种名为"横向连接的东西"。这很像一个可以返回多列的相关子查询。横向连接非常强大 - 解开只是他们所做事情的开始。但是,解开是开始了解它们的一种方式。

答案 1 :(得分:1)

您可以使用UNPIVOT

DECLARE @T TABLE (Year INT, January INT, Feb INT, March INT, April INT)
INSERT INTO @T VALUES(2017,20,15,7,25)

SELECT [Year], [Month], [Value] FROM @T 
    UNPIVOT( [Value] FOR [Month] IN( [January], [Feb], [March], [April] ) ) AS UNPVT

结果

Year        Month       Value
----------- ----------- -----------
2017        January     20
2017        Feb         15
2017        March       7
2017        April       25