Détails
Convertir efficacement des lignes en colonnes dans sql server
Je cherche un moyen efficace de convertir des lignes en colonnes dans le serveur SQL, j'ai entendu dire que PIVOT n'est pas très rapide, et je dois traiter beaucoup d'enregistrements.
Voici mon exemple :
-------------------------------
| Id | Value | ColumnName |
-------------------------------
| 1 | John | FirstName |
| 2 | 2.4 | Amount |
| 3 | ZH1E4A | PostalCode |
| 4 | Fork | LastName |
| 5 | 857685 | AccountNumber |
-------------------------------
Voici mon résultat :
---------------------------------------------------------------------
| FirstName |Amount| PostalCode | LastName | AccountNumber |
---------------------------------------------------------------------
| John | 2.4 | ZH1E4A | Fork | 857685 |
---------------------------------------------------------------------
Comment puis-je construire le résultat ?
358
2
Il existe plusieurs façons de transformer les données de plusieurs lignes en colonnes.
Utilisation de `PIVOT
Dans SQL Server, vous pouvez utiliser la fonction
PIVOT
pour transformer les données de lignes en colonnes :Voir [Démo][1].
Pivot avec un nombre inconnu de
columnnames
.Si vous avez un nombre inconnu de
columnnames
que vous voulez transposer, alors vous pouvez utiliser le SQL dynamique :Voir [Démo][2].
Utilisation d'une fonction d'agrégation
Si vous ne voulez pas utiliser la fonction
PIVOT
, alors vous pouvez utiliser une fonction d'agrégation avec une expressionCASE
:Voir [Démo][3].
Utilisation de jointures multiples
Cette opération peut également être réalisée à l'aide de jointures multiples, mais vous aurez besoin d'une colonne pour associer chacune des lignes, ce qui n'est pas le cas dans votre échantillon de données. Mais la syntaxe de base serait la suivante :
[1] : https://data.stackexchange.com/stackoverflow/query/497432 [2] : https://data.stackexchange.com/stackoverflow/query/497433 [3] : https://data.stackexchange.com/stackoverflow/query/497434
Comme le pivotement des données est toujours d'actualité, j'ai décidé d'ajouter quelque chose de mon cru. Il s'agit plutôt d'une méthode que d'un simple script mais qui vous offre beaucoup plus de possibilités. Tout d'abord, il y a 3 scripts que vous devez déployer :
ColumnActionList
] -> contient des données comme paramètre.proc_PivotPrepare
] -> prépare nos données.proc_PivotExecute
] -> exécute le script.