За да транспонирате данните в желания от вас резултат, ще трябва да използвате и двата UNPIVOT
и PIVOT
функции.
UNPIVOT
функцията приема A
и B
колони и преобразува резултатите в редове. След това ще използвате PIVOT
функция за трансформиране на day
стойности в колони:
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
Вижте SQL Fiddle с демонстрация.
Ако използвате SQL Server 2008+, тогава можете да използвате CROSS APPLY
с VALUES
за да отмените центрирането на данните. Вашият код ще бъде променен на следното:
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
Вижте SQL Fiddle с демонстрация.
Редактирайте #1, като приложите текущата си заявка към горното решение, ще използвате нещо подобно на това:
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