Heim > Datenbank > MySQL-Tutorial > Wie kann ich eine mehrspaltige Tabelle in SQL transponieren?

Wie kann ich eine mehrspaltige Tabelle in SQL transponieren?

Patricia Arquette
Freigeben: 2025-01-14 21:01:43
Original
555 Leute haben es durchsucht

How Can I Transpose a Multi-Column Table in SQL?

SQL Server-Mehrfachlistentransponierung

Tabellentransposition bedeutet, Zeilen in Spalten und Spalten in Zeilen umzuwandeln. Dies ist besonders nützlich, wenn Sie Daten für Analysen oder Präsentationen Pivotieren müssen.

Frage:

Sie möchten eine Tabelle mit mehreren Spalten aus dem folgenden Format umsetzen:

Day A B
Mon 1 2
Tue 3 4
Wed 5 6
Thu 7 8
Fri 9 0

In das folgende Format konvertieren:

Value Mon Tue Wed Thu Fri
A 1 3 5 7 9
B 2 4 6 8 0

Lösung:

Um mehrere Spalten in SQL zu transponieren, können Sie die Funktionen UNPIVOT und PIVOT zusammen verwenden.

1. UNPIVOT:

Die UNPIVOT-Funktion denormalisiert Daten, indem sie Spalten in Zeilen umwandelt. Dadurch wird eine neue Tabelle mit drei Spalten erstellt: Tag, Spalte und Wert.

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

2. PIVOT:

Die PIVOT-Funktion normalisiert dann die Daten neu, indem sie die Tageswerte in Spalten umwandelt. Dadurch wird die transponierte Tabelle erstellt.

<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>
Nach dem Login kopieren

Hinweis:

  • Die MAX-Aggregatfunktion wird in PIVOT-Abfragen verwendet, um sicherzustellen, dass doppelte Werte korrekt behandelt werden.
  • Für SQL Server 2008 und höher können Sie CROSS APPLY mit VALUES-Syntax verwenden, um die Daten anstelle von UNPIVOT umzukehren.

Bewerben Sie sich auf Ihre Anfrage:

Um Ihre spezifische Abfrage umzusetzen, können Sie den folgenden modifizierten Code verwenden:

<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>
Nach dem Login kopieren

Dadurch wird eine transponierte Tabelle im gewünschten Format generiert.

Das obige ist der detaillierte Inhalt vonWie kann ich eine mehrspaltige Tabelle in SQL transponieren?. 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