結果を得るには、最初に、および列を行に変換してアンピボットする必要があります。次に、ピボット関数を適用して値を列に変換します。(参照: MSDN PIVOT/UNPIVOTドキュメント)High
Low
Avg
month
SQL Server 2008+ を使用CROSS APPLY
しVALUES
ているため、 と を使用してピボットを解除できます。アンピボットするコードは次のとおりです。
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 を使用して結果を取得できます。