Heim > Datenbank > MySQL-Tutorial > Wie werden MySQL-Tabellendaten mit Fragen und Antworten als Spalten geschwenkt?

Wie werden MySQL-Tabellendaten mit Fragen und Antworten als Spalten geschwenkt?

Susan Sarandon
Freigeben: 2024-12-21 19:31:14
Original
510 Leute haben es durchsucht

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

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
Nach dem Login kopieren

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;
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage