Pivotement de plusieurs colonnes dans TSQL
Lorsque vous travaillez avec des bases de données relationnelles, il est souvent nécessaire de remodeler les données à des fins de reporting. Le pivotement est une technique qui peut être utilisée pour transformer les données d'une structure orientée lignes en une structure orientée colonnes. Cet article montre comment faire pivoter plusieurs colonnes dans un tableau tout en conservant toutes les étiquettes associées.
Défi
Considérez le tableau suivant nommé GRAND_TOTALS :
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 |
L'objectif est de faire pivoter les colonnes RESULT, SCORE et GRADE, ce qui donne un tableau avec les éléments suivants format :
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 |
Solution
Pour faire pivoter efficacement plusieurs colonnes, envisagez les étapes suivantes :
Annulez le pivotement du résultat, du score et de la note Colonnes :
L'annulation du pivotement consiste à convertir plusieurs colonnes en une seule colonne tout en gardant une trace de la colonne d'origine. noms. Ceci peut être réalisé en utilisant la clause UNPIVOT. La syntaxe ci-dessous montre comment annuler le pivotement des colonnes :
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)
Cette requête créera une nouvelle table avec les colonnes RATIO, COL et VALUE, où COL représente le nom de la colonne d'origine (résultat, score ou note). ) et VALUE contient les valeurs correspondantes.
Appliquer le PIVOT Fonction :
Une fois les données non pivotées, la fonction PIVOT peut être appliquée pour transformer les données dans le format souhaité. La syntaxe de pivotement est 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;
Dans cette requête, la fonction PIVOT regroupe les lignes par colonne RATIO et fait pivoter les données en utilisant les valeurs COL comme en-têtes de colonne. La fonction d'agrégation MAX est utilisée pour récupérer la dernière valeur pour chaque ligne.
Résultat
L'exécution de la requête ci-dessus produira le tableau croisé dynamique souhaité :
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 |
Ce tableau conserve toutes les étiquettes nécessaires et fait pivoter avec succès les colonnes souhaitées.
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!