Để 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