Le pivotement des données est une opération courante dans la transformation des données, qui consiste à remodeler les données d'une disposition verticale à une disposition horizontale. En SQL, cela peut être réalisé en utilisant différentes techniques telles que les fonctions UNPIVOT ou PIVOT. Cependant, MySQL ne dispose pas de fonction PIVOT native, ce qui nécessite d'explorer des méthodes alternatives.
Une approche du pivotement dynamique dans MySQL consiste à construire dynamiquement une requête à l'aide de fonctions d'agrégation et d'instructions CASE. Cette méthode implique la création dynamique de l'instruction SQL en fonction des dimensions et des valeurs requises dans la sortie.
L'exemple suivant montre comment implémenter le pivotement dynamique à l'aide d'instructions préparées :
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;
Dans cette requête , nous générons dynamiquement une instruction SELECT basée sur les types de pièces distincts, qui sont les dimensions du pivot. Nous utilisons l'instruction CASE pour attribuer le part_id à la colonne pivot appropriée en fonction du part_type. L'instruction SQL générée est ensuite exécutée à l'aide d'instructions préparées pour de meilleures performances.
Une autre option consiste à utiliser une version statique de la requête si vous connaissez le nombre limité de colonnes nécessaires dans la sortie :
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
En tirant parti de ces techniques, vous pouvez implémenter un pivotement dynamique dans MySQL pour remodeler efficacement vos données.
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!