Heim > Datenbank > MySQL-Tutorial > Wie transponiere ich eine SQL-Tabelle mit mehreren Spalten?

Wie transponiere ich eine SQL-Tabelle mit mehreren Spalten?

DDD
Freigeben: 2025-01-14 20:52:47
Original
336 Leute haben es durchsucht

How to Transpose a SQL Table with Multiple Columns?

Transponieren Sie eine SQL-Tabelle mit mehreren Spalten

Frage:

Sie müssen eine SQL-Tabelle mit mehreren Spalten transponieren, zum Beispiel:

<code>Day  A  B 
---------
Mon  1  2
Tue  3  4
Wed  5  6
Thu  7  8
Fri  9  0</code>
Nach dem Login kopieren

Transponieren Sie es in das folgende Format:

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

Lösung:

Um eine Tabelle mit mehreren Spalten zu transponieren, können Sie die Funktionen UNPIVOT und PIVOT zusammen verwenden.

  1. UNPIVOT: Konvertieren Sie mehrere Spalten (A, B) in Zeilen und fügen Sie eine Spalte für Spaltennamen hinzu:
<code class="language-sql">select day, col, value
from yourtable
unpivot
(
  value
  for col in (A, B)
) unpiv</code>
Nach dem Login kopieren
  1. PIVOT: Konvertieren Sie den Wert „Tag“ in eine Spalte und aggregieren Sie die Spalte „Wert“:
<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

Dadurch wird die erforderliche transponierte Tabelle generiert.

Zusätzliche Hinweise:

  • Wenn Ihre SQL Server-Version 2008 oder höher ist, können Sie CROSS APPLY und VALUES anstelle der UNPIVOT-Funktion verwenden, um die Daten zu transponieren:
<code class="language-sql">select *
from
(
  select day, col, value
  from yourtable
  cross apply
  (
    values ('A', ACalls), ('B', BCalls)
  ) c (col, value)
) src
pivot
(
  max(value)
  for day in (Mon, Tue, Wed, Thu, Fri)
) piv</code>
Nach dem Login kopieren
  • Um den Transponierungsvorgang für Ihre spezifische Abfrage durchzuführen, können Sie Code ähnlich der folgenden Struktur 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

Das obige ist der detaillierte Inhalt vonWie transponiere ich eine SQL-Tabelle mit mehreren Spalten?. 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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage