Méthode 3 : Utilisation des fonctions Unpivot et Pivot
La troisième façon de changer la forme d’un tableau pour convertir des lignes en colonnes dans MySQL est d’utiliser les fonctions unpivot et pivot. La fonction de non-pivot est la fonction opposée de la fonction de pivot, qui modifie la forme de la table en faisant pivoter les données des colonnes vers les lignes. La fonction de dépivotement peut être utilisée pour transposer les tableaux de manière plus flexible et dynamique.
Cependant, MySQL n’a pas non plus de fonction de dépivot intégrée que nous pouvons utiliser directement. Par conséquent, nous devons également utiliser certaines extensions ou plugins pour ajouter une fonctionnalité de dépivotement à MySQL. L’une des extensions les plus populaires et les plus fréquemment utilisées est la Flexviews dont nous avons parlé précédemment. Flexviews fournit une fonction de décroisement en plus des fonctions de pivot et d’actualisation incrémentielle pour MySQL.
Pour modifier la forme du tableau afin de convertir les lignes en colonnes à l’aide des fonctions unpivot et pivot, nous devons procéder comme suit :
- Installez et activez l’extension Flexviews dans MySQL si cela n’a pas encore été fait. Suivez les instructions d’installation données sur son site officiel
- Créez une table temporaire qui contient les données que nous voulons mettre en forme, si elle n’existait pas déjà auparavant. Les tables temporaires peuvent être créées à l’aide de la commande CRÉER TABLE TEMPORAIRE. Par exemple, nous pouvons créer une table temporaire avec le nom sales_temp contenant les données de la table sales_table avec la commande suivante :
CREATE TEMPORARY TABLE sales_temp AS SELECT * FROM sales_table;
- Créez une vue qui contient la définition de la fonction de dépermutation que nous voulons utiliser. Une vue est un objet de base de données qui stocke les résultats d’une requête SQL sous la forme d’une table virtuelle. Les vues peuvent être créées à l’aide de la commande CREATE VIEW. Par exemple, nous pouvons créer une vue avec le nom unpivot_view contenant une définition de fonction de non-pivot pour modifier la forme d’une table sales_temp avec la commande suivante :
CREATE VIEW unpivot_view AS SELECT FVUnpivot $( 'sales_temp', -- nom de la table temporaire qui contient les données 'category', -- le nom de la colonne qui restera dans la ligne 'month', -- le nom de la nouvelle colonne qui stockera le nom de l'ancienne colonne 'sales', -- le nom de la nouvelle colonne qui stockera les anciennes valeurs de colonne 'month, sales' -- le nom de l'ancienne colonne à convertir en ligne ) AS unpivot_result; -- nom d'alias pour les résultats de la fonction de non-pivot
- Créez une autre vue qui contient la définition de la fonction de pivot que nous voulons utiliser. Les vues peuvent être créées à l’aide de la commande CREATE VIEW. Par exemple, nous pouvons créer une vue avec le nom pivot_view contenant la définition de la fonction pivot pour modifier la forme de la table unpivot_view avec la commande suivante :
CREATE VIEW pivot_view AS SELECT FVPivot$( 'unpivot_view', -- le nom d'affichage qui contient les données 'category', -- le nom de la colonne qui sera la nouvelle ligne 'month', -- le nom de la colonne qui deviendra la nouvelle colonne 'sales', -- nom de la colonne qui contient la valeur à calculer 'SUM', -- le nom de la fonction d'agrégation à utiliser NULL -- noms de colonnes supplémentaires à inclure dans le tableau des résultats (facultatif) ) AS pivot_result; -- nom d'alias pour le résultat de la fonction de pivot
- Exécutez une requête SQL pour appeler la fonction pivot de la vue qui a été créée. Les requêtes SQL que nous pouvons utiliser sont les suivantes :
SELECT * FROM pivot_view;
Cette requête générera la table de résultats souhaitée, comme indiqué ci-dessus.