Heim >Datenbank >MySQL-Tutorial >Wie kann ich MySQL-Tabellenspaltendaten in Zeilen umwandeln?
MySQL-Pivot-Tabellenspaltendaten als Zeilen
Um Tabellenspaltendaten als Zeilen in MySQL zu plotten, können Sie eine Kombination aus MAX( ) und CASE-Funktionen zusammen mit einer GROUP BY-Klausel. Hier ist die allgemeine Syntax:
SELECT GROUP_BY_COLUMNS, MAX(CASE WHEN condition1 THEN column1 END) AS column1_alias, MAX(CASE WHEN condition2 THEN column2 END) AS column2_alias, ... FROM TABLE GROUP BY GROUP_BY_COLUMNS
Im bereitgestellten Beispiel haben Sie drei Tabellen: Frage, die die Fragen des Fragebogens enthält; Ergebnisse, die Benutzer mit Jobs verknüpfen; und Antworten, die die Benutzerantworten auf die Fragen enthält.
Um die Fragenantworten als Spalten für jeden Ergebnissatz zu schwenken, können Sie die folgende Abfrage verwenden:
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
Diese Abfrage kombiniert die Antworttabelle mit der Fragentabelle basierend auf dem Feld fk_question_id und der Ergebnistabelle basierend auf dem Feld fk_result_id. Anschließend werden die Ergebnisse nach den Spalten „ID“, „user_ID“ und „job_id“ gruppiert und für jede Gruppe mithilfe der Funktion MAX() und der CASE-Anweisung die maximale Antwort für jede Frage berechnet.
Alternativ, falls vorhanden Bei einer unbekannten Anzahl von Fragen können Sie eine dynamische SQL-Abfrage verwenden, die die Abfragezeichenfolge basierend auf den verfügbaren Fragen erstellt:
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;
Die dynamische Abfrage erstellt die @sql-Variable mit dem Erstellt die erforderlichen Spalten für jede Frage und führt sie als vorbereitete Anweisung aus.
Diese Abfragen geben die Fragenantworten als Spalten für jede Ergebnismenge zurück, sodass Sie sie in einem benutzerfreundlichen Format anzeigen können.
Das obige ist der detaillierte Inhalt vonWie kann ich MySQL-Tabellenspaltendaten in Zeilen umwandeln?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!