Để chuyển dữ liệu thành kết quả bạn muốn, bạn sẽ cần sử dụng cả UNPIVOT và PIVOT các chức năng.
UNPIVOT hàm lấy A và B cột và chuyển đổi kết quả thành hàng. Sau đó, bạn sẽ sử dụng PIVOT hàm để chuyển đổi day giá trị thành các cột:
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
Xem SQL Fiddle với Demo.
Nếu bạn đang sử dụng SQL Server 2008+, thì bạn có thể sử dụng CROSS APPLY với VALUES để hủy chia dữ liệu. Mã của bạn sẽ được thay đổi thành như sau:
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
Xem SQL Fiddle với Demo.
Chỉnh sửa # 1, áp dụng truy vấn hiện tại của bạn vào giải pháp trên, bạn sẽ sử dụng một thứ tương tự như sau:
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