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