Maison >base de données >tutoriel mysql >Comment créer une requête MySQL Crosstab pour faire pivoter les données des lignes vers les colonnes ?

Comment créer une requête MySQL Crosstab pour faire pivoter les données des lignes vers les colonnes ?

Barbara Streisand
Barbara Streisandoriginal
2025-01-06 10:42:42717parcourir

How to Create a MySQL Crosstab Query to Pivot Data from Rows to Columns?

Requête pivot/croisée MySQL : transformation des données pour un affichage amélioré

Une requête tableau croisé ou pivot dans MySQL vous permet de transformer des données, généralement d'une structure orientée lignes vers un format orienté colonnes, facilitant l'analyse et la présentation. Pour comprendre comment utiliser une requête croisée, examinons un exemple pratique.

Exemple : faire pivoter les données vers un format orienté colonnes

Considérons un tableau avec la structure suivante :

app_id  transaction_id  mobile_no  node_id  customer_attribute  entered_value
100     111             9999999999  1        Q1                  2
100     111             9999999999  2        Q2                  1
100     111             9999999999  3        Q3                  4
100     111             9999999999  4        Q4                  3
100     111             9999999999  5        Q5                  2
100     222             8888888888  4        Q4                  1
100     222             8888888888  3        Q3                  2
100     222             8888888888  2        Q2                  1
100     222             8888888888  1        Q1                  3
100     222             8888888888  5        Q5                  4

Vous souhaitez afficher ces enregistrements au format suivant :

app_id  transaction_id  mobile     Q1  Q2  Q3  Q4 | Q5
100    111             9999999999   2   1   4  3  2
100    222             8888888888   3   1   2  1  4

Pour y parvenir, vous pouvez utiliser une requête croisée. Cependant, lors de votre première tentative, vous avez récupéré plusieurs lignes pour chaque point de données, ce qui n'est pas le résultat souhaité.

Requête de tableau croisé corrigée

La requête ajustée suivante fournira le résultat souhaité :

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

Utiliser l'attribut client comme en-tête de colonne

Vous avez également exprimé le désir d'utiliser les valeurs de la colonne customer_attribute comme en-têtes de colonnes. Bien que la fonction NAME_CONST ne soit pas adaptée à cet effet, vous pouvez utiliser une technique susceptible d'obtenir le résultat souhaité. Cependant, veuillez fournir des précisions supplémentaires sur le résultat souhaité pour permettre une solution précise.

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