Puisque vous voulez faire pivoter plusieurs colonnes de données, je suggérerais d'abord de ne pas faire pivoter le result
, score
et grade
colonnes afin que vous n'ayez pas plusieurs colonnes mais que vous ayez plusieurs lignes.
Selon votre version de SQL Server, vous pouvez utiliser la fonction UNPIVOT ou CROSS APPLY. La syntaxe pour ne pas pivoter les données sera similaire à :
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)
Voir SQL Fiddle avec démo. Une fois les données non pivotées, vous pouvez appliquer la fonction 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;
Voir SQL Fiddle avec démo. Cela vous donnera le résultat :
| 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 |