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