Afin de transposer les données dans le résultat que vous souhaitez, vous devrez utiliser à la fois le UNPIVOT
et le PIVOT
fonctions.
Le UNPIVOT
la fonction prend le A
et B
colonnes et convertit les résultats en lignes. Ensuite, vous utiliserez le PIVOT
fonction pour transformer le day
valeurs en colonnes :
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
Voir SQL Fiddle avec démo.
Si vous utilisez SQL Server 2008+, vous pouvez utiliser CROSS APPLY
avec VALUES
pour ne pas pivoter les données. Votre code serait remplacé par le suivant :
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
Voir SQL Fiddle avec démo.
Modifier #1, en appliquant votre requête actuelle dans la solution ci-dessus, vous utiliserez quelque chose de similaire à ceci :
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