Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Vollständige SQL-Transponierung der Tabelle

Um die Daten in das gewünschte Ergebnis umzuwandeln, müssen Sie sowohl den UNPIVOT verwenden und der PIVOT Funktionen.

Das UNPIVOT Funktion nimmt den A und B Spalten und wandelt die Ergebnisse in Zeilen um. Dann verwenden Sie den PIVOT Funktion, um den day umzuwandeln Werte in Spalten:

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

Siehe SQL Fiddle mit Demo.

Wenn Sie SQL Server 2008+ verwenden, können Sie CROSS APPLY verwenden mit VALUES um die Daten zu entpivozieren. Ihr Code würde wie folgt geändert werden:

select *
from
(
  select day, col, value
  from yourtable
  cross apply
  (
    values ('A', A),('B', B)
  ) c (col, value)
) src
pivot
(
  max(value)
  for day in (Mon, Tue, Wed, Thu, Fri)
) piv

Siehe SQL Fiddle mit Demo.

Bearbeiten Sie Nr. 1, wenden Sie Ihre aktuelle Abfrage auf die obige Lösung an und verwenden Sie etwas Ähnliches wie dieses:

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