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

Wie transponiere ich eine SQL-Tabelle mit mehreren Spalten?

DDD
DDDOriginal
2025-01-14 20:52:47292Durchsuche

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>

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>

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>
  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>

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>
  • 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>

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!

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