Maison >base de données >tutoriel mysql >Comment annuler le pivotement des colonnes en lignes dans MySQL ?
Astuces pour convertir des colonnes en lignes dans MySQL
Lorsque vous travaillez avec des données organisées en colonnes dans MySQL, vous devrez peut-être les convertir dans un format qui présente les données en lignes. Ce processus est appelé sans pivotement.
Question :
Considérez la forme suivante :
<code>ID | a | b | c 1 | a1 | b1 | c1 2 | a2 | b2 | c2</code>
Le but est de convertir des colonnes en lignes pour obtenir un tableau avec la structure suivante :
<code>ID | 值 | 列名 1 | a1 | a 1 | b1 | b 1 | c1 | c 2 | a2 | a 2 | b2 | b 2 | c2 | c</code>
Solution :
Contrairement à d'autres bases de données, MySQL n'a pas de fonction de déroulement intégrée. Pour obtenir les résultats souhaités, vous pouvez utiliser la requête UNION ALL
pour combiner des requêtes distinctes qui convertissent sélectivement chaque colonne en lignes :
<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 génère trois ensembles de données : un pour chaque colonne. Chaque groupe contient l'ID, le nom de la colonne et la valeur correspondante.
Utilisez CROSS JOIN :
Une autre façon consiste à utiliser CROSS JOIN
:
<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>
Dans ce cas, CROSS JOIN
crée un produit cartésien entre les lignes de yourtable
et les lignes de la sous-requête qui génère les noms de colonnes. L'instruction CASE
mappe chaque nom de colonne à sa valeur de colonne correspondante.
Les deux méthodes déroulent efficacement les données, vous donnant la structure par lignes souhaitée.
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!