我有以下数据:
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
非常感谢你的帮助。我一直在努力实现这个好几个小时,但我无法做到。
答案 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