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
Libérer: 2025-01-25 13:07:08
original
941 Les gens l'ont consulté

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>
    Copier après la connexion
    Tableau des partenaires (partenaires):
  • Ventes (ventes):
    <code>  id | name
       1 | 合作伙伴A
       2 | 合作伙伴B</code>
    Copier après la connexion
  • 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>
    Copier après la connexion
  • 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>
Copier après la connexion
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>
Copier après la connexion
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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal