Abyste mohli data převést do požadovaného výsledku, budete muset použít oba UNPIVOT
a PIVOT
funkce.
UNPIVOT
funkce přebírá A
a B
sloupce a převede výsledky na řádky. Poté použijete PIVOT
funkce pro transformaci day
hodnoty do sloupců:
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
Viz SQL Fiddle with Demo.
Pokud používáte SQL Server 2008+, můžete použít CROSS APPLY
s VALUES
pro odklopení dat. Váš kód by se změnil na následující:
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
Viz SQL Fiddle with Demo.
Upravte #1, když použijete svůj aktuální dotaz na výše uvedené řešení, použijete něco podobného:
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