Para transpor os dados para o resultado que você deseja, você precisará usar tanto o
UNPIVOT
e o PIVOT
funções. O
UNPIVOT
função recebe o A
e B
colunas e converte os resultados em linhas. Então você usará o PIVOT
função para transformar o day
valores em colunas: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
Consulte SQL Fiddle com demonstração.
Se você estiver usando o SQL Server 2008+, poderá usar
CROSS APPLY
com VALUES
para desarticular os dados. Seu código seria alterado para o seguinte: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
Consulte SQL Fiddle com demonstração.
Edite #1, aplicando sua consulta atual na solução acima, você usará algo semelhante a isto:
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