Heim >Datenbank >MySQL-Tutorial >Wie kann ich MySQL-Tabellenspaltendaten in Zeilen umwandeln?

Wie kann ich MySQL-Tabellenspaltendaten in Zeilen umwandeln?

Barbara Streisand
Barbara StreisandOriginal
2024-12-25 19:37:10969Durchsuche

How to Pivot MySQL Table Column Data into Rows?

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!

Stellungnahme:
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