Transposer des colonnes dynamiques en lignes : réaliser la transformation souhaitée
Introduction :
Unpivoting des données des colonnes vers les lignes sont une opération courante dans la manipulation de données. Cet article explore comment transposer des colonnes dynamiques dans Table_1, en considérant uniquement les valeurs supérieures à 0, pour obtenir le Expected_Result_Table souhaité.
Fonction UNPIVOT de MySQL :
MySQL ne fournit pas nativement d'UNPIVOT fonction. Cependant, les méthodes suivantes peuvent être utilisées pour obtenir le résultat souhaité :
Approche basée sur les colonnes statiques :
Pour un nombre limité de colonnes statiques, vous pouvez utiliser une série de UNION TOUTES les instructions pour créer la table transposée. Chaque instruction sélectionnerait des colonnes spécifiques telles que Word et Qty. Cette approche convient aux schémas statiques avec un nombre connu de colonnes.
Approche dynamique basée sur les colonnes :
Pour les schémas dynamiques avec un nombre inconnu de colonnes, une approche plus sophistiquée est requis. Vous pouvez utiliser une instruction préparée pour générer du SQL dynamique qui fera pivoter les colonnes. Cela implique de créer dynamiquement les instructions UNION ALL pour chaque colonne.
Exemple de colonnes dynamiques :
La requête MySQL fournie montre comment transposer les colonnes du Tableau_1 en utilisant une approche dynamique :
SET @sql = NULL; SELECT GROUP_CONCAT(DISTINCT CONCAT( 'select id, ''', c.column_name, ''' as word, ', c.column_name, ' as qty from yt where ', c.column_name, ' > 0' ) SEPARATOR ' UNION ALL ' ) INTO @sql FROM information_schema.columns c where c.table_name = 'yt' and c.column_name not in ('id') order by c.ordinal_position; SET @sql = CONCAT('select id, word, qty from (', @sql, ') x order by id'); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
Conclusion :
En utilisant l'approche statique ou dynamique, vous peut transposer efficacement des colonnes dynamiques dans MySQL, en considérant uniquement les valeurs supérieures à 0, pour obtenir la structure basée sur les lignes souhaitée représentée par Expected_Result_Table.
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!