Heim > Datenbank > MySQL-Tutorial > Wie kann ich in MySQL für die Berichterstellung Spalten in Zeilen umwandeln?

Wie kann ich in MySQL für die Berichterstellung Spalten in Zeilen umwandeln?

Mary-Kate Olsen
Freigeben: 2025-01-09 14:57:41
Original
764 Leute haben es durchsucht

How to Pivot Columns into Rows in MySQL for Reporting?

MySQL Pivot: Spalten in Zeilen konvertieren

In relationalen Datenbanken wie MySQL müssen Daten häufig zu Berichtszwecken transformiert werden. Eine solche Transformation umfasst die Umwandlung von Spalten in Zeilen, ein Vorgang, der als „Pivotieren“ bezeichnet wird. Diese Technik ermöglicht eine flexiblere und prägnantere Datendarstellung.

Frage:

Betrachten Sie die folgende MySQL-Tabelle:

<code class="language-sql">CREATE TABLE mytable (
  id INT, 
  month VARCHAR(3), 
  col1 VARCHAR(1), 
  col2 VARCHAR(1), 
  col3 VARCHAR(1), 
  col4 VARCHAR(1)
);

INSERT INTO mytable (id, month, col1, col2, col3, col4) VALUES
(101, 'Jan', 'A', 'B', NULL, 'B'),
(102, 'Feb', 'C', 'A', 'G', 'E');</code>
Nach dem Login kopieren

Ziel ist es, einen Bericht zu erstellen, der die Werte von Spalte 1 bis Spalte 4 als Zeilen und die Monate Jan und Februar als Spalten anzeigt.

Lösung:

MySQL bietet keine integrierten Funktionen zum Aufheben oder Pivotieren von Daten. Wir können diese Vorgänge jedoch mit UNION ALL simulieren und mit CASE-Ausdrücken aggregieren.

1. Anti-Perspektive:

Um die Pivotierung der Daten aufzuheben, erstellen wir eine neue Unterabfrage, die UNION ALL verwendet, um Zeilen aus allen Spalten in einer einzigen Spalte zu kombinieren:

<code class="language-sql">SELECT id, month, col1 AS `value`, 'col1' AS `descrip`
UNION ALL
SELECT id, month, col2 AS `value`, 'col2' AS `descrip`
UNION ALL
SELECT id, month, col3 AS `value`, 'col3' AS `descrip`
UNION ALL
SELECT id, month, col4 AS `value`, 'col4' AS `descrip`
FROM mytable;</code>
Nach dem Login kopieren

2. Perspektive:

Als nächstes packen wir die Unpivot-Abfrage in eine Unterabfrage und verwenden Aggregate und CASE-Anweisungen, um die Daten in das erforderliche Format umzuwandeln:

<code class="language-sql">SELECT descrip, 
  MAX(CASE WHEN month = 'Jan' THEN `value` ELSE NULL END) AS Jan,
  MAX(CASE WHEN month = 'Feb' THEN `value` ELSE NULL END) AS Feb
FROM (
  SELECT id, month, `value`, descrip
  FROM (
    SELECT id, month, col1 AS `value`, 'col1' AS `descrip`
    UNION ALL
    SELECT id, month, col2 AS `value`, 'col2' AS `descrip`
    UNION ALL
    SELECT id, month, col3 AS `value`, 'col3' AS `descrip`
    UNION ALL
    SELECT id, month, col4 AS `value`, 'col4' AS `descrip`
    FROM mytable
  ) AS unpivoted
) AS src
GROUP BY descrip;</code>
Nach dem Login kopieren

Ergebnis:

Descrip Jan Feb
col1 A C
col2 B A
col3 NULL G
col4 B E

Hinweis: Ändern Sie ELSE 0 END in ELSE NULL END, um das Ergebnis konsistenter mit den Datenbankspezifikationen zu machen und unnötige 0-Werte zu vermeiden.

Das obige ist der detaillierte Inhalt vonWie kann ich in MySQL für die Berichterstellung Spalten in Zeilen umwandeln?. 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