Maison > base de données > tutoriel mysql > Comment faire pivoter les données d'une table MySQL avec les réponses aux questions sous forme de colonnes ?

Comment faire pivoter les données d'une table MySQL avec les réponses aux questions sous forme de colonnes ?

Susan Sarandon
Libérer: 2024-12-21 19:31:14
original
466 Les gens l'ont consulté

How to Pivot MySQL Table Data with Question Answers as Columns?

Données de colonne de tableau croisé dynamique MySQL sous forme de lignes

Les tableaux croisés dynamiques sont un outil puissant pour transformer les données d'un format basé sur des colonnes en un format de ligne. format basé. Dans MySQL, cette transformation peut être réalisée en utilisant l'expression CASE en conjonction avec des fonctions d'agrégation.

Pour convertir les données fournies dans un format de tableau croisé dynamique, où les réponses aux questions sont affichées sous forme de colonnes, la requête suivante peut être utilisée :

SELECT  a.ID,
        a.user_ID,
        a.job_id,
        MAX(CASE WHEN c.question = 'Is it this?' THEN b.answer END) 'Is it this?',
        MAX(CASE WHEN c.question = 'Or this?' THEN b.answer END) 'Or this?',
        MAX(CASE WHEN c.question = 'Or that? ' THEN b.answer END) 'Or that? '
FROM    Results a
        INNER JOIN Answers b
            ON a.id = b.fk_result_id
        INNER JOIN Question c
            ON b.fk_question_id = c.ID
GROUP   BY a.ID,
        a.user_ID,
        a.job_id
Copier après la connexion

Dans cette requête, l'expression CASE est utilisée pour vérifier la colonne de questions de la table Question et renvoyer la réponse correspondante de la table Réponses. La fonction d'agrégation MAX est ensuite utilisée pour trouver la valeur maximale pour chaque question, qui représente la réponse fournie pour cette question.

Pivotement dynamique

Pour les cas où le nombre des questions est inconnue ou volumineuse, une instruction SQL dynamique peut être générée à l'aide du code suivant :

SET @sql = NULL;
SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'MAX(CASE WHEN c.question = ''',
      question,
      ''' then b.answer end) AS ',
      CONCAT('`',question,'`')
    )
  ) INTO @sql
FROM Question;

SET @sql = CONCAT('SELECT  a.ID,
                            a.user_ID,
                            a.job_id, ', @sql, ' 
                    FROM    Results a
                            INNER JOIN Answers b
                                ON a.id = b.fk_result_id
                            INNER JOIN Question c
                                ON b.fk_question_id = c.ID
                    GROUP   BY a.ID,
                            a.user_ID,
                            a.job_id');

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

Ce code génère une instruction SQL dynamique qui peut traiter un certain nombre de questions. Il construit dynamiquement la clause SELECT en concaténant la valeur maximale de chaque question sous forme de nom de colonne.

Le résultat de la requête sera un tableau croisé dynamique au format souhaité, où chaque réponse à la question est affichée dans une colonne distincte. .

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