Maison >base de données >tutoriel mysql >Comment annuler le pivotement des colonnes MySQL en lignes à l'aide de UNION ALL ou CROSS JOIN ?
Restructuration des colonnes MySQL en lignes
La transformation des données est une tâche courante dans la gestion de bases de données. Dans MySQL, la conversion des données de colonne en lignes (un processus appelé non-pivot) est souvent nécessaire pour améliorer l'analyse ou la présentation des données. Bien que MySQL ne dispose pas d'une fonction de non-pivot dédiée, cette transformation peut être réalisée efficacement à l'aide d'une requête UNION ALL
ou d'un CROSS JOIN
.
La UNION ALL
Méthode
Une stratégie efficace emploie l'opérateur UNION ALL
:
<code class="language-sql">SELECT id, 'a' AS col, a AS value FROM yourtable UNION ALL SELECT id, 'b' AS col, b AS value FROM yourtable UNION ALL SELECT id, 'c' AS col, c AS value FROM yourtable;</code>
Cette requête récupère la colonne id
à côté du nom de la colonne (col
) et de sa valeur correspondante (value
). Le résultat est un ensemble de données restructuré où chaque ligne représente une seule paire colonne-valeur.
L'CROSS JOIN
Approche
Alternativement, un CROSS JOIN
peut être utilisé :
<code class="language-sql">SELECT t.id, c.col, CASE c.col WHEN 'a' THEN a WHEN 'b' THEN b WHEN 'c' THEN c END AS data FROM yourtable t CROSS JOIN ( SELECT 'a' AS col UNION ALL SELECT 'b' UNION ALL SELECT 'c' ) c;</code>
Ici, yourtable
(alias t
) est joint à une sous-requête qui génère une liste de noms de colonnes (col
). L'instruction CASE
sélectionne dynamiquement la valeur appropriée en fonction du nom de la colonne. Le résultat, tout comme la méthode UNION ALL
, est un ensemble de données aplati avec chaque ligne contenant le id
, le nom de la colonne et sa valeur associée.
Les techniques UNION ALL
et CROSS JOIN
fournissent des solutions robustes pour les colonnes non pivotantes dans MySQL, permettant la conversion de données en colonnes en lignes pour un traitement ou une visualisation ultérieure.
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!