Heim >Datenbank >MySQL-Tutorial >Wie kann ich MySQL-Daten mit dynamischen Spaltenüberschriften in eine einzelne Zeile umwandeln?

Wie kann ich MySQL-Daten mit dynamischen Spaltenüberschriften in eine einzelne Zeile umwandeln?

Susan Sarandon
Susan SarandonOriginal
2025-01-06 09:51:40484Durchsuche

How to Pivot MySQL Data into a Single Row with Dynamic Column Headers?

MySQL PIVOT/CROSSTAB QUERY

Problem 1: Daten in einer einzigen Zeile abrufen

Sie können die PIVOT-Funktion verwenden um Ihre Daten in ein Einzelzeilenformat umzuwandeln. Die folgende Abfrage ändert Ihren vorherigen Versuch, dies zu erreichen:

SELECT 
  app_id,
  transaction_id,
  mobile_no,
  MAX(CASE WHEN node_id = 1 THEN entered_value END) AS Q1,
  MAX(CASE WHEN node_id = 2 THEN entered_value END) AS Q2,
  MAX(CASE WHEN node_id = 3 THEN entered_value END) AS Q3,
  MAX(CASE WHEN node_id = 4 THEN entered_value END) AS Q4,
  MAX(CASE WHEN node_id = 5 THEN entered_value END) AS Q5
FROM trn_user_log
GROUP BY app_id, transaction_id, mobile_no;

Diese Abfrage gruppiert die Zeilen nach app_id, transaction_id und mobile_no und verwendet die MAX-Funktion, um den maximal eingegebenen Wert für jede entsprechende node_id-Spalte abzurufen zu den „Q“-Werten, die Sie anzeigen möchten.

Problem 2: Spaltenwerte als Kopfzeile verwenden Namen

Um die Werte in der Spalte customer_attribute als Headernamen zu verwenden, können Sie die CASE-Anweisung in Verbindung mit dem Schlüsselwort AS verwenden. Die geänderte Abfrage lautet wie folgt:

SELECT 
  app_id,
  transaction_id,
  mobile_no,
  MAX(CASE WHEN node_id = 1 THEN entered_value END) AS CASE customer_attribute WHEN 'Q1' THEN entered_value END,
  MAX(CASE WHEN node_id = 2 THEN entered_value END) AS CASE customer_attribute WHEN 'Q2' THEN entered_value END,
  MAX(CASE WHEN node_id = 3 THEN entered_value END) AS CASE customer_attribute WHEN 'Q3' THEN entered_value END,
  MAX(CASE WHEN node_id = 4 THEN entered_value END) AS CASE customer_attribute WHEN 'Q4' THEN entered_value END,
  MAX(CASE WHEN node_id = 5 THEN entered_value END) AS CASE customer_attribute WHEN 'Q5' THEN entered_value END
FROM trn_user_log
GROUP BY app_id, transaction_id, mobile_no;

In dieser Abfrage wird die CASE-Anweisung innerhalb der MAX-Funktion verwendet, um den eingegebenen Wert basierend auf übereinstimmenden customer_attribute-Werten auszuwählen. Das Schlüsselwort AS weist die passenden customer_attribute-Werte als Spaltenüberschriften zu.

Das obige ist der detaillierte Inhalt vonWie kann ich MySQL-Daten mit dynamischen Spaltenüberschriften in eine einzelne Zeile 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