Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

TSQL PIVOT PLUSIEURS COLONNES

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 |