2017-10-19 105 views
0

我有数据象下面这样:SQL枢轴问题

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 

非常感谢你的帮助。我一直试图达到这个数小时,但我无法。

+1

所以[许多](https://stackoverflow.com/questions/18617243/sql-unpivot-multiple-columns-data)[重复](HTTPS://计算器.COM /问题/ 19055902/UNPIVOT-与列名称)。 –

回答

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实现所谓的 “横向连接” 的东西。这很像一个可以返回多个列的相关子查询。横向连接非常强大 - 未经处理只是他们所做事情的开始。但不透明是开始了解它们的一种方式。

+0

谢谢戈登,你有什么理由为什么你喜欢申请undeivot – Agga

+0

@Agga。 。 。我想我在问题中解释了这一点。 'apply'是一个通用的,强大的运营商。 'unpivot'只存在于一个特定的用例中。 –

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 
+0

你真棒!有效 – Agga