次の表がありますが、これをピボットしてすべてのラベルを保持できるかどうかはわかりません。
RATIO RESULT SCORE GRADE
Current Ratio 1.294 60 Good
Gearing Ratio 0.3384 70 Good
Performance Ratio 0.0427 50 Satisfactory
TOTAL NULL 180 Good
私はピボットの使用があまり良くないことを認めますので、いくつかの試みの後、この出力になります:
SELECT 'RESULT' AS 'Ratio'
,[Current Ratio] AS 'Current Ratio'
,[Gearing Ratio] AS 'Gearing Ratio'
,[Performance Ratio] AS 'Performance Ratio'
,[TOTAL] AS 'TOTAL'
FROM
(
SELECT RATIO, RESULT
FROM GRAND_TOTALS
) AS SREC
PIVOT
(
MAX(RESULT)
FOR RATIO IN ([Current Ratio],[Gearing Ratio], [Performance Ratio], [TOTAL])
) AS PVT
これにより結果が得られます。
Ratio Current Ratio Gearing Ratio Performance Ratio
Result 1.294 0.3384 0.0427
私が必要とする結果を生み出すために次に何をすべきかについて非常に困惑していることを認めます:
Ratio Current Ratio Gearing Ratio Performance Ratio TOTAL
Result 1.294 0.3384 0.0427 NULL
Score 60 70 50 180
Grade Good Good Satisfactory Good
データの複数の列をピボットしたいので、最初にresult
、score
、およびgrade
列のピボットを解除することをお勧めします。そうすれば、複数の列はありませんが、複数の行ができます。
SQL Serverのバージョンに応じて、UNPIVOT関数またはCROSS APPLYを使用できます。データのピボットを解除する構文は次のようになります。
select ratio, col, value
from GRAND_TOTALS
cross apply
(
select 'result', cast(result as varchar(10)) union all
select 'score', cast(score as varchar(10)) union all
select 'grade', grade
) c(col, value)
SQL Fiddle with Demo を参照してください。データのピボットが解除されたら、PIVOT関数を適用できます。
select ratio = col,
[current ratio], [gearing ratio], [performance ratio], total
from
(
select ratio, col, value
from GRAND_TOTALS
cross apply
(
select 'result', cast(result as varchar(10)) union all
select 'score', cast(score as varchar(10)) union all
select 'grade', grade
) c(col, value)
) d
pivot
(
max(value)
for ratio in ([current ratio], [gearing ratio], [performance ratio], total)
) piv;
SQL Fiddle with Demo を参照してください。これにより結果が得られます。
| RATIO | CURRENT RATIO | GEARING RATIO | PERFORMANCE RATIO | TOTAL |
|--------|---------------|---------------|-------------------|-----------|
| grade | Good | Good | Satisfactory | Good |
| result | 1.29400 | 0.33840 | 0.04270 | (null) |
| score | 60.00000 | 70.00000 | 50.00000 | 180.00000 |