Maison >base de données >tutoriel mysql >Comment pivoter les lignes en colonnes dynamiques dans MySQL?

Comment pivoter les lignes en colonnes dynamiques dans MySQL?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2025-01-25 13:07:08946parcourir

How to Pivot Rows into Dynamic Columns in MySQL?

mysql: convertissez les données de ligne en colonne dynamique

Description du problème

Supposons que nous ayons les trois tables MySQL suivantes:

    Tableau de produits (produits):
  • <code>  id | name
       1 | 产品A
       2 | 产品B</code>
    Tableau des partenaires (partenaires):
  • Ventes (ventes):
    <code>  id | name
       1 | 合作伙伴A
       2 | 合作伙伴B</code>
  • L'objectif est de convertir les données de ligne dans le tableau de vente en colonnes dynamiques, et le nom représente différents produits. Les résultats de sortie attendus sont les suivants:

    <code>  partners_id | products_id
                1             2
                2             5
                1             5
                1             3
                1             4
                1             5
                2             2
                2             4
                2             3
                1             1</code>
  • Réponse
Malheureusement, MySQL n'a pas une fonction de pivot spéciale. Cependant, nous pouvons combiner la fonction agrégée et l'instruction de cas pour obtenir des résultats similaires:

<code>partner_name | 产品A | 产品B | 产品C | 产品D | 产品E
合作伙伴A              1           1           1           1           2
合作伙伴B              0           1           1           1           1</code>
Conversion de colonne dynamique

Afin de gérer des produits inconnus, nous devons utiliser des colonnes dynamiques en conversion. Cela doit utiliser les informations de la table de produit pour préparer l'instruction SQL:

<code class="language-sql">SELECT pt.partner_name,
  COUNT(CASE WHEN pd.product_name = '产品A' THEN 1 END) AS 产品A,
  COUNT(CASE WHEN pd.product_name = '产品B' THEN 1 END) AS 产品B,
  COUNT(CASE WHEN pd.product_name = '产品C' THEN 1 END) AS 产品C,
  COUNT(CASE WHEN pd.product_name = '产品D' THEN 1 END) AS 产品D,
  COUNT(CASE WHEN pd.product_name = '产品E' THEN 1 END) AS 产品E
FROM partners pt
LEFT JOIN sales s
  ON pt.part_id = s.partner_id
LEFT JOIN products pd
  ON s.product_id = pd.prod_id
GROUP BY pt.partner_name</code>
Cette méthode permet de gérer n'importe quel nombre de colonnes de produit et de s'assurer que la requête peut s'adapter aux modifications de la table de produit sans modifier l'instruction SQL elle-même.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn