Heim >Datenbank >MySQL-Tutorial >Wie transponiere ich Tabellen in SQL mit UNPIVOT und PIVOT?

Wie transponiere ich Tabellen in SQL mit UNPIVOT und PIVOT?

Barbara Streisand
Barbara StreisandOriginal
2025-01-14 21:06:44522Durchsuche

How to Transpose Tables in SQL Using UNPIVOT and PIVOT?

SQL-Tabellentransposition: Anwendung der UNPIVOT- und PIVOT-Funktionen

Das Transponieren einer Tabelle in SQL kann mithilfe einer Kombination aus UNPIVOT- und PIVOT-Funktionen erreicht werden. Die UNPIVOT-Funktion wandelt Spalten in Zeilen um, während die PIVOT-Funktion Zeilen in Spalten umwandelt.

UNPIVOT-Daten

Die UNPIVOT-Funktion wird verwendet, um mehrere Spalten in eine einzelne Spalte umzuwandeln. Im Beispiel müssen die Spalten A und B erweitert werden. Die folgende Abfrage veranschaulicht diesen Vorgang:

<code class="language-sql">select day, col, value
from yourtable
unpivot
(
  value
  for col in (A, B)
) unpiv;</code>

Diese Abfrage erstellt eine neue Tabelle mit drei Spalten: Tag, Spalte und Wert. Die Spalte „col“ enthält den Spaltennamen (A oder B) und die Spalte „value“ enthält den entsprechenden Wert aus der erweiterten Spalte.

PIVOT-Daten

Die PIVOT-Funktion wird verwendet, um Zeilen in Spalten umzuwandeln. In diesem Beispiel müssen die Tageswerte (Mo, Di, Wed, Do, Fr) in Spalten umgewandelt werden:

<code class="language-sql">select *
from
(
  select day, col, value
  from yourtable
  unpivot
  (
    value
    for col in (A, B)
  ) unpiv
) src
pivot
(
  max(value)
  for day in (Mon, Tue, Wed, Thu, Fri)
) piv;</code>

Die letzte Abfrage erzeugt die gewünschte Ausgabe:

<code>Value | Mon | Tue | Wed | Thu | Fri
-------|-----|-----|-----|-----|-----
A      | 1   | 3   | 5   | 7   | 9
B      | 2   | 4   | 6   | 8   | 0</code>

Lösung auf Ihre Anfrage anwenden

Um diese Lösung auf Ihre spezifische Anfrage anzuwenden, können Sie sie wie folgt ändern:

<code class="language-sql">select *
from
(
  select LEFT(datename(dw,datetime),3) as DateWeek,
    col, 
    value
  from DataTable 
  cross apply 
  (
    values ('A', ACalls), ('B', BCalls)
  ) c (col, value)
) src
pivot
(
  sum(value)
  for dateweek in (Mon, Tue, Wed, Thu, Fri)
) piv;</code>

Diese Abfrage wandelt die Daten in Ihrer DataTable in das gewünschte Format um.

Das obige ist der detaillierte Inhalt vonWie transponiere ich Tabellen in SQL mit UNPIVOT und PIVOT?. 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