Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Bảng đầy đủ chuyển vị SQL

Để chuyển dữ liệu thành kết quả bạn muốn, bạn sẽ cần sử dụng cả UNPIVOTPIVOT các chức năng.

UNPIVOT hàm lấy AB 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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cấp quyền truy cập người dùng msdb vào hồ sơ thư cơ sở dữ liệu trong SQL Server (T-SQL)

  2. DAY () Ví dụ trong SQL Server (T-SQL)

  3. Sử dụng kết quả của một biểu thức (ví dụ:lệnh gọi hàm) trong danh sách tham số thủ tục được lưu trữ?

  4. DEGREES () Ví dụ trong SQL Server

  5. Không thể kết nối với máy chủ - Một lỗi liên quan đến mạng hoặc trường hợp cụ thể