Heim >Datenbank >MySQL-Tutorial >Wie transformiere ich MySQL-Spaltendaten in eine zeilenbasierte Pivot-Tabelle?

Wie transformiere ich MySQL-Spaltendaten in eine zeilenbasierte Pivot-Tabelle?

Linda Hamilton
Linda HamiltonOriginal
2025-01-09 15:02:43180Durchsuche

How to Transform MySQL Column Data into a Row-Based Pivot Table?

Konvertieren Sie MySQL-Spaltendaten in das Zeilenformat (Pivot-Tabelle)

In diesem Artikel wird beschrieben, wie Sie eine MySQL-Tabelle mit mehrspaltigen Daten in Daten im Zeilen- und Spaltenformat konvertieren. Die resultierende Struktur wird als Pivot-Tabelle bezeichnet und bietet eine prägnante und dennoch umfassende Ansicht der Daten.

Problemstellung:

Wir haben eine Tabelle mit mehreren Spalten. Jede Spalte stellt eine Datenkategorie dar. Unser Ziel ist es, sie in ein Pivot-Tabellenformat umzuwandeln, in dem die Zeilen Kategorien darstellen (Spalte 1, Spalte 2, Spalte 3, Spalte 4) und die Spalten Monate darstellen ( Jan., Feb.).

Lösungsrahmen:

Um diese Konvertierung in MySQL zu implementieren, müssen wir den folgenden zweistufigen Prozess befolgen:

Anti-Perspektive (UNION ALL):

  1. Teilen Sie die Eingabespalten (col1, col2 usw.) in separate Zeilen auf und erstellen Sie eine neue Spalte („descrip“) für die Kategorien und eine weitere Spalte für die entsprechenden Werte. Verwenden Sie den UNION ALL-Operator, um diese Zeilen in einer einzigen Tabelle zusammenzufassen.

Perspektive (Aggregation und CASE):

  1. Wenden Sie eine Aggregatfunktion wie MAX() auf die Unpivot-Tabelle an und verwenden Sie gleichzeitig eine CASE-Anweisung, um zu bestimmen, welche Werte zu welchem ​​Monat gehören. Dadurch können wir die erforderlichen Spalten (Jan, Feb) erstellen.

Implementierte Abfragen:

Anti-Perspektive (UNION ALL):

<code class="language-sql">SELECT
  id,
  month,
  col1 AS value,
  'col1' AS descrip
FROM
  yourtable
UNION ALL
SELECT
  id,
  month,
  col2 AS value,
  'col2' AS descrip
FROM
  yourtable
UNION ALL
SELECT
  id,
  month,
  col3 AS value,
  'col3' AS descrip
FROM
  yourtable
UNION ALL
SELECT
  id,
  month,
  col4 AS value,
  'col4' AS descrip
FROM
  yourtable;</code>

Perspektive (Aggregation und CASE):

<code class="language-sql">SELECT
  descrip,
  MAX(CASE WHEN month = 'Jan' THEN value ELSE 0 END) AS Jan,
  MAX(CASE WHEN month = 'Feb' THEN value ELSE 0 END) AS Feb
FROM
  (
    SELECT
      id,
      month,
      col1 AS value,
      'col1' AS descrip
    FROM
      yourtable
    UNION ALL
    SELECT
      id,
      month,
      col2 AS value,
      'col2' AS descrip
    FROM
      yourtable
    UNION ALL
    SELECT
      id,
      month,
      col3 AS value,
      'col3' AS descrip
    FROM
      yourtable
    UNION ALL
    SELECT
      id,
      month,
      col4 AS value,
      'col4' AS descrip
    FROM
      yourtable
  ) AS source
GROUP BY
  descrip;</code>

Ergebnis:

Diese Abfrage konvertiert die Eingabetabelle in das Pivot-Tabellenformat:

DESCRIP Jan Feb
col1 A C
col2 B A
col3 0 G
col4 B E

Das obige ist der detaillierte Inhalt vonWie transformiere ich MySQL-Spaltendaten in eine zeilenbasierte Pivot-Tabelle?. 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