Untuk mentranspos data ke hasil yang Anda inginkan, Anda harus menggunakan UNPIVOT
dan PIVOT
fungsi.
UNPIVOT
fungsi mengambil A
dan B
kolom dan mengubah hasilnya menjadi baris. Kemudian Anda akan menggunakan PIVOT
berfungsi untuk mengubah day
nilai ke dalam kolom:
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
Lihat SQL Fiddle dengan Demo.
Jika Anda menggunakan SQL Server 2008+, maka Anda dapat menggunakan CROSS APPLY
dengan VALUES
untuk membatalkan data. Kode Anda akan diubah menjadi berikut:
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
Lihat SQL Fiddle dengan Demo.
Edit #1, menerapkan kueri Anda saat ini ke dalam solusi di atas, Anda akan menggunakan sesuatu yang mirip dengan ini:
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