Pivoter plusieurs colonnes dans TSQL
Lorsque vous travaillez avec une base de données relationnelle, il est souvent nécessaire de transformer les données pour faciliter leur analyse ou rapport sur. Une façon d'y parvenir consiste à faire pivoter les données, ce qui implique de faire pivoter les lignes en colonnes et vice versa.
Considérez le tableau suivant qui contient les ratios financiers, les résultats, les scores et les notes :
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 |
Pour faire pivoter ces données et conserver toutes les étiquettes, nous devons annuler le pivotement des colonnes de résultat, de score et de note afin que chaque ligne ait une valeur dans chaque colonne. Ceci peut être réalisé en utilisant la fonction UNPIVOT ou CROSS APPLY, selon la version de SQL Server que vous utilisez.
Une fois les données non pivotées, nous pouvons appliquer la fonction PIVOT pour faire pivoter les lignes en colonnes. La syntaxe sera similaire à la suivante :
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;
Le résultat résultant sera un tableau avec une ligne pour chaque ratio et des colonnes pour le ratio actuel, le ratio d'endettement, le ratio de performance, le total, le score et note :
RATIO | CURRENT RATIO | GEARING RATIO | PERFORMANCE RATIO | TOTAL | SCORE | GRADE |
---|---|---|---|---|---|---|
grade | Good | Good | Satisfactory | Good | NULL | NULL |
result | 1.29400 | 0.33840 | 0.04270 | NULL | NULL | NULL |
score | 60.00000 | 70.00000 | 50.00000 | 180.00000 | NULL | NULL |
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!