Om de gegevens om te zetten in het gewenste resultaat, moet u zowel de UNPIVOT
en de PIVOT
functies.
De UNPIVOT
functie neemt de A
en B
kolommen en zet de resultaten om in rijen. Dan gebruik je de PIVOT
functie om de day
. te transformeren waarden in kolommen:
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
Zie SQL Fiddle met demo.
Als u SQL Server 2008+ gebruikt, kunt u CROSS APPLY
. gebruiken met VALUES
om de gegevens ongedaan te maken. Uw code wordt als volgt gewijzigd:
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
Zie SQL Fiddle met demo.
Bewerk #1, door uw huidige zoekopdracht toe te passen op de bovenstaande oplossing, zult u iets soortgelijks als dit gebruiken:
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