爲了得到結果,你必須首先unpivot的的High
,Low
和Avg
將這些列轉換成行。然後,您將應用數據透視表函數將month
值轉換爲列。 (請參閱:MSDN文檔PIVOT/UNPIVOT)
由於您使用的SQL Server 2008+,你可以使用CROSS APPLY
和VALUES
到UNPIVOT。不透明代碼是:
select t.month,
c.col,
c.value
from yourtable t
cross apply
(
values ('High', high), ('Low', Low), ('Avg', Avg)
) c (col, value)
請參閱SQL Fiddle with Demo。這給出結果的格式,然後可以通過一個月擺動:
| MONTH | COL | VALUE |
------------------------
| Jan | High | 10 |
| Jan | Low | 9 |
| Jan | Avg | 9.5 |
| Feb | High | 8 |
| Feb | Low | 7 |
一旦數據行,你申請的旋轉功能,因此代碼將是:
select col, Jan, Feb, Mar
from
(
select t.month,
c.col,
c.value
from yourtable t
cross apply
(
values ('High', high), ('Low', Low), ('Avg', Avg)
) c (col, value)
) d
pivot
(
sum(value)
for month in (Jan, Feb, Mar)
) piv
見SQL Fiddle with Demo 。這給出結果:
| COL | JAN | FEB | MAR |
--------------------------
| Avg | 9.5 | 7.5 | 6.5 |
| High | 10 | 8 | 7 |
| Low | 9 | 7 | 6 |
既然你旋轉月份的名字,我懷疑你需要這樣一個動態的SQL版本,但如果你有一個未知的數值,那麼你就可以使用動態SQL得到的結果。
請在網站上搜索PIVOT/UNPIVOT示例。這個問題每天至少要問5次。 – 2013-03-27 15:19:47