Maison > base de données > tutoriel mysql > Comment transposer des colonnes dynamiques en lignes dans MySQL avec des valeurs supérieures à 0 ?

Comment transposer des colonnes dynamiques en lignes dans MySQL avec des valeurs supérieures à 0 ?

Mary-Kate Olsen
Libérer: 2024-12-11 20:31:11
original
800 Les gens l'ont consulté

How to Transpose Dynamic Columns to Rows in MySQL with Values Greater Than 0?

Transposer des colonnes dynamiques en lignes : réaliser la transformation souhaitée

Introduction :
Unpivoting des données des colonnes vers les lignes sont une opération courante dans la manipulation de données. Cet article explore comment transposer des colonnes dynamiques dans Table_1, en considérant uniquement les valeurs supérieures à 0, pour obtenir le Expected_Result_Table souhaité.

Fonction UNPIVOT de MySQL :
MySQL ne fournit pas nativement d'UNPIVOT fonction. Cependant, les méthodes suivantes peuvent être utilisées pour obtenir le résultat souhaité :

Approche basée sur les colonnes statiques :
Pour un nombre limité de colonnes statiques, vous pouvez utiliser une série de UNION TOUTES les instructions pour créer la table transposée. Chaque instruction sélectionnerait des colonnes spécifiques telles que Word et Qty. Cette approche convient aux schémas statiques avec un nombre connu de colonnes.

Approche dynamique basée sur les colonnes :
Pour les schémas dynamiques avec un nombre inconnu de colonnes, une approche plus sophistiquée est requis. Vous pouvez utiliser une instruction préparée pour générer du SQL dynamique qui fera pivoter les colonnes. Cela implique de créer dynamiquement les instructions UNION ALL pour chaque colonne.

Exemple de colonnes dynamiques :
La requête MySQL fournie montre comment transposer les colonnes du Tableau_1 en utilisant une approche dynamique :

SET @sql = NULL;

SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'select id, ''',
      c.column_name,
      ''' as word, ',
      c.column_name,
      ' as qty 
      from yt 
      where ',
      c.column_name,
      ' > 0'
    ) SEPARATOR ' UNION ALL '
  ) INTO @sql
FROM information_schema.columns c
where c.table_name = 'yt'
  and c.column_name not in ('id')
order by c.ordinal_position;

SET @sql 
  = CONCAT('select id, word, qty
           from
           (', @sql, ') x  order by id');


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

Conclusion :
En utilisant l'approche statique ou dynamique, vous peut transposer efficacement des colonnes dynamiques dans MySQL, en considérant uniquement les valeurs supérieures à 0, pour obtenir la structure basée sur les lignes souhaitée représentée par Expected_Result_Table.

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