For at transponere dataene til det ønskede resultat, skal du bruge både UNPIVOT
og PIVOT
funktioner.
UNPIVOT
funktionen tager A
og B
kolonner og konverterer resultaterne til rækker. Så skal du bruge PIVOT
funktion til at transformere day
værdier i kolonner:
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
Se SQL Fiddle with Demo.
Hvis du bruger SQL Server 2008+, kan du bruge CROSS APPLY
med VALUES
for at frigøre dataene. Din kode vil blive ændret til følgende:
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
Se SQL Fiddle with Demo.
Rediger #1, ved at anvende din nuværende forespørgsel i ovenstående løsning, vil du bruge noget, der ligner dette:
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