J'ai le tableau suivant, mais je ne sais pas s'il est possible de le faire pivoter et de conserver toutes les étiquettes.
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
J'admets ne pas être très bon avec l'utilisation des pivots, donc après plusieurs tentatives aboutissant à cette sortie:
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
Cela donne le résultat:
Ratio Current Ratio Gearing Ratio Performance Ratio
Result 1.294 0.3384 0.0427
Je vais admettre que je suis très confus sur ce qu'il faut faire pour obtenir le résultat dont j'ai besoin, à savoir:
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
Puisque vous voulez faire pivoter plusieurs colonnes de données, je suggèrerais d’abord de dé-pivoter les colonnes result
, score
et grade
afin que vous n’ayez pas plusieurs colonnes mais que vous en ayez plusieurs. rangées.
Selon votre version de SQL Server, vous pouvez utiliser la fonction UNPIVOT ou CROSS APPLY. La syntaxe pour déporter les données sera similaire à celle-ci:
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 Demo . Une fois que les données ont été libéré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 Demo . 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 |