2017-10-19 104 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