conversion de lignes en colonnes (PIVOT) et de colonnes en lignes (UNPIVOT) dans SQL Server


Introduction

dans mon dernier article « conversion D’une valeur séparée par des virgules en lignes et Vice Versa dans SQL Server”, j’ai parlé de la façon dont vous pouvez convertir des valeurs séparées par des virgules (ou séparées Dans cet article, je montre comment vous pouvez convertir les valeurs de lignes en valeurs de colonnes (PIVOT) et les valeurs de colonnes en valeurs de lignes (UNPIVOT) dans SQL Server.,

conversion de lignes en colonnes – PIVOT

SQL Server dispose d’un opérateur relationnel PIVOT pour transformer les valeurs uniques d’une colonne spécifiée à partir de plusieurs lignes en plusieurs valeurs de colonne dans la sortie (onglet croisé), faisant pivoter efficacement une table. Il permet également d’effectuer des agrégations, partout où cela est nécessaire, pour les valeurs de colonne attendues dans la sortie finale. La syntaxe de base d’un opérateur relationnel PIVOT ressemble à ceci:

avec le script ci-dessous, créons une table et chargeons-y des données., Comme vous pouvez le voir dans l’image ci-dessous, il a des informations de vente pour certains pays depuis quelques années. Aussi, si vous remarquez, pour chaque pays et pour chaque année, il y a une ligne distincte.

Maintenant, en utilisant l’opérateur PIVOT, nous allons convertir les valeurs de ligne dans la colonne des valeurs avec le script ci-dessous et les résultats comme indiqué dans l’image ci-dessous.

bien que nous ayons utilisé la fonction D’agrégation de somme, dans ce cas, il n’y a pas de sommation, car il n’y a qu’une seule ligne pour chaque combinaison unique pour le pays et l’année., Veuillez noter l’utilisation de crochets pour les valeurs de colonne pivot; ceux-ci sont requis.

dynamiser le PIVOT

Si vous remarquez dans le script ci-dessus, nous avons fourni des valeurs (2005, 2006, 2007 et 2008) pour les colonnes pivot car ces valeurs sont disponibles dans les jeux de données d’origine. Mais que se passe-t-il si des valeurs supplémentaires sont attendues à l’avenir, par exemple 2009 et 2010, etc. pour la colonne pivot?,

dans ce cas, vous pouvez toujours utiliser les valeurs de colonne pivot, qui devraient venir (ou qui ne sont toujours pas disponibles dans l’ensemble de données d’origine) à l’avenir, bien que vous voyiez NULL pour ses valeurs. Le script ci-dessous montre ce scénario et l’image ci-dessous montre des valeurs nulles pour les années 2009 et 2010 car il n’y a pas de données pour ces années.

l’approche discutée ci-dessus fonctionne bien si vous connaissez déjà toutes les valeurs possibles pour la colonne pivot, mais que faire si vous ne le faites pas?,

dans ce cas, vous pouvez écrire une requête dynamique pour saisir d’abord toutes les valeurs uniques de la colonne pivot lors de l’exécution, puis une requête dynamique d’écriture pour l’exécuter avec la requête pivot comme indiqué ci – dessous:

conversion des colonnes en lignes-UNPIVOT

UNPIVOT est un autre opérateur relationnel dans SQL Server qui effectue presque l’opération inverse de PIVOT, en faisant pivoter les valeurs des colonnes en lignes valeurs. Permettez-moi de le démontrer avec un exemple; permet de créer une table avec des données pivotées de la requête précédente avec le script ci-dessous., L’image ci-dessous montre les données de la table nouvellement créée avec des données pivotées.

pour faire pivoter les valeurs de colonne en valeurs de ligne, nous allons maintenant utiliser L’opérateur UNPIVOT comme indiqué ci-dessous. L’image ci-dessous montre les données tournées:

Si vous vous référez, j’ai dit UNPIVOT est presque l’inverse de l’opérateur de PIVOT; cela signifie qu’il pourrait ou non être exactement le même. La raison en est que Pivot effectue l’agrégation tout en faisant pivoter les valeurs de ligne en valeurs de colonne et peut fusionner plusieurs valeurs de ligne possibles en une seule valeur de colonne dans la sortie., Par exemple, considérons pour un pays et une année donnés qu’il y a deux valeurs, disons 5000 et 6000. Maintenant, lorsque vous le pivotez, la sortie aura 11000 comme valeur de colonne si vous avez SUM comme fonction d’agrégation. Plus tard, si vous voulez le récupérer, vous obtiendrez 11000 pas les valeurs bi-furcated (5000 et 6000 comme original). Cela dit, Nous pouvons dire que si les valeurs pivotées sont des valeurs agrégées, il ne sera pas possible de récupérer les données d’origine.,

Conclusion

dans cet article, j’ai démontré comment vous pouvez convertir les valeurs de ligne en valeurs de colonne (PIVOT) et les valeurs de colonne en valeurs de ligne (UNPIVOT) dans SQL Server. J’ai également parlé d’écrire une requête dynamique pour écrire une requête de pivot dynamique dans laquelle les valeurs de colonne de pivot possibles sont déterminées au moment de l’exécution.

Leave a Comment