Per trasporre i dati nel risultato che desideri, dovrai utilizzare entrambi i UNPIVOT
e il PIVOT
funzioni.
Il UNPIVOT
la funzione accetta A
e B
colonne e converte i risultati in righe. Quindi utilizzerai il PIVOT
funzione per trasformare il day
valori in colonne:
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
Vedi SQL Fiddle con demo.
Se utilizzi SQL Server 2008+, puoi utilizzare CROSS APPLY
con VALUES
per annullare il pivot dei dati. Il tuo codice verrebbe modificato come segue:
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
Vedi SQL Fiddle con demo.
Modifica n. 1, applicando la tua query corrente nella soluzione sopra, utilizzerai qualcosa di simile a questo:
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