MySQL-Pivot-Tabellen-Spaltendaten als Zeilen
Pivot-Tabellen sind ein leistungsstarkes Tool zum Umwandeln von Daten aus einem spaltenbasierten Format in ein zeilenbasiertes Format. basierendes Format. In MySQL kann diese Transformation mithilfe des CASE-Ausdrucks in Verbindung mit Aggregationsfunktionen erreicht werden.
Um die angegebenen Daten in ein Pivot-Tabellenformat zu konvertieren, in dem Fragenantworten als Spalten angezeigt werden, kann die folgende Abfrage verwendet werden:
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
In dieser Abfrage wird der CASE-Ausdruck verwendet, um die Fragenspalte der Fragentabelle zu überprüfen und die entsprechende Antwort aus der Antworttabelle zurückzugeben. Anschließend wird die Aggregationsfunktion MAX verwendet, um den Maximalwert für jede Frage zu ermitteln, der die für diese Frage bereitgestellte Antwort darstellt.
Dynamisches Pivotieren
Für Fälle, in denen die Zahl Anzahl der Fragen unbekannt oder groß ist, kann mit dem folgenden Code eine dynamische SQL-Anweisung generiert werden:
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;
Dieser Code generiert eine dynamische SQL-Anweisung, die verarbeitet werden kann beliebig viele Fragen. Die SELECT-Klausel wird dynamisch erstellt, indem der Maximalwert für jede Frage als Spaltenname verkettet wird.
Das Ergebnis der Abfrage ist eine Pivot-Tabelle mit dem gewünschten Format, in der jede Frageantwort als separate Spalte angezeigt wird .
Das obige ist der detaillierte Inhalt vonWie werden MySQL-Tabellendaten mit Fragen und Antworten als Spalten geschwenkt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!