Aby przetransponować dane do pożądanego wyniku, będziesz musiał użyć zarówno UNPIVOT
i PIVOT
funkcje.
UNPIVOT
funkcja przyjmuje A
i B
kolumn i konwertuje wyniki na wiersze. Następnie użyjesz PIVOT
funkcja do przekształcenia day
wartości w kolumnach:
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
Zobacz SQL Fiddle z demonstracją.
Jeśli używasz SQL Server 2008+, możesz użyć CROSS APPLY
z VALUES
aby odwrócić dane. Twój kod zostanie zmieniony na następujący:
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
Zobacz SQL Fiddle z demonstracją.
Edytuj nr 1, stosując bieżące zapytanie do powyższego rozwiązania, użyjesz czegoś podobnego do tego:
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