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

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