Maison > base de données > tutoriel mysql > Comment faire pivoter les données MySQL sur une seule ligne avec des en-têtes de colonne dynamiques ?

Comment faire pivoter les données MySQL sur une seule ligne avec des en-têtes de colonne dynamiques ?

Susan Sarandon
Libérer: 2025-01-06 09:51:40
original
483 Les gens l'ont consulté

How to Pivot MySQL Data into a Single Row with Dynamic Column Headers?

REQUÊTE PIVOT/CROSSTAB MySQL

Problème 1 : Récupération de données sur une seule ligne

Vous pouvez utiliser la fonction PIVOT pour transformer vos données dans un format à une seule ligne. La requête suivante modifie votre tentative précédente pour y parvenir :

SELECT 
  app_id,
  transaction_id,
  mobile_no,
  MAX(CASE WHEN node_id = 1 THEN entered_value END) AS Q1,
  MAX(CASE WHEN node_id = 2 THEN entered_value END) AS Q2,
  MAX(CASE WHEN node_id = 3 THEN entered_value END) AS Q3,
  MAX(CASE WHEN node_id = 4 THEN entered_value END) AS Q4,
  MAX(CASE WHEN node_id = 5 THEN entered_value END) AS Q5
FROM trn_user_log
GROUP BY app_id, transaction_id, mobile_no;
Copier après la connexion

Cette requête regroupe les lignes par app_id, transaction_id et mobile_no et utilise la fonction MAX pour récupérer la valeur maximale saisie pour chaque colonne node_id, qui correspond aux valeurs « Q » que vous souhaitez afficher.

Problème 2 : Utiliser les valeurs de colonne comme en-tête Noms

Pour utiliser les valeurs de la colonne customer_attribute comme noms d'en-tête, vous pouvez utiliser l'instruction CASE en conjonction avec le mot-clé AS. La requête modifiée est la suivante :

SELECT 
  app_id,
  transaction_id,
  mobile_no,
  MAX(CASE WHEN node_id = 1 THEN entered_value END) AS CASE customer_attribute WHEN 'Q1' THEN entered_value END,
  MAX(CASE WHEN node_id = 2 THEN entered_value END) AS CASE customer_attribute WHEN 'Q2' THEN entered_value END,
  MAX(CASE WHEN node_id = 3 THEN entered_value END) AS CASE customer_attribute WHEN 'Q3' THEN entered_value END,
  MAX(CASE WHEN node_id = 4 THEN entered_value END) AS CASE customer_attribute WHEN 'Q4' THEN entered_value END,
  MAX(CASE WHEN node_id = 5 THEN entered_value END) AS CASE customer_attribute WHEN 'Q5' THEN entered_value END
FROM trn_user_log
GROUP BY app_id, transaction_id, mobile_no;
Copier après la connexion

Dans cette requête, l'instruction CASE est utilisée dans la fonction MAX pour sélectionner la valeur_entrée en fonction des valeurs customer_attribute correspondantes. Le mot-clé AS attribue les valeurs customer_attribute correspondantes comme en-têtes de colonne.

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