Maison > base de données > tutoriel mysql > Comment faire pivoter dynamiquement des données dans MySQL à l'aide d'instructions préparées ?

Comment faire pivoter dynamiquement des données dans MySQL à l'aide d'instructions préparées ?

Mary-Kate Olsen
Libérer: 2025-01-06 07:36:40
original
661 Les gens l'ont consulté

How to Dynamically Pivot Data in MySQL Using Prepared Statements?

Pivotement dynamique dans MySQL à l'aide d'instructions préparées

MySQL ne dispose pas d'une fonction PIVOT native, mais vous pouvez l'émuler à l'aide de fonctions d'agrégation et d'instructions CASE. Pour les données pivotantes dynamiquement, les instructions préparées offrent une solution efficace.

Considérons un scénario avec un tableau des pièces du produit :

CREATE TABLE Parts (
    part_id INT,
    part_type VARCHAR(1),
    product_id INT
);
INSERT INTO Parts (part_id, part_type, product_id) VALUES
(1, 'A', 1),
(2, 'B', 1),
(3, 'A', 2),
(4, 'B', 2),
(5, 'A', 3),
(6, 'B', 3);
Copier après la connexion

Le résultat souhaité est un tableau croisé dynamique résumant les ID de pièces pour chacune produit :

product_id  part_A_id  part_B_id
----------  ----------  ----------
1           1          2
2           3          4
3           5          6
Copier après la connexion

Pivoté dynamique Requête

SET @sql = NULL;
SELECT GROUP_CONCAT(DISTINCT
    CONCAT(
        'max(case when part_type = ''',
        part_type,
        ''' then part_id end) AS part_',
        part_type, '_id'
    )
) INTO @sql
FROM Parts;
SET @sql = CONCAT('SELECT product_id, ', @sql, ' 
                  FROM Parts 
                   GROUP BY product_id');

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
Copier après la connexion

Requête pivotée statique (colonnes limitées)

Pour une requête statique avec un nombre fixe de colonnes pivot :

SELECT product_id,
    max(CASE WHEN part_type = 'A' THEN part_id END) AS part_A_id,
    max(CASE WHEN part_type = 'B' THEN part_id END) AS part_B_id
FROM Parts
GROUP BY product_id;
Copier après la connexion

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 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