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