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

Vui lòng giải thích các phần của PIVOT

Giải thích về truy vấn tổng hợp

FROM 
    (SELECT OtherID, Val, amount
    FROM @randomTable) p

Đây là những cột trở thành "dữ liệu cơ sở" cho trục. Không bao gồm các cột không làm bất cứ điều gì. Cũng giống như bạn không đặt các cột không phải GROUP BY vào mệnh đề CHỌN, bạn không liệt kê các cột không sử dụng trong nguồn PIVOT.

PIVOT
(
    max(amount)
    FOR Val IN (Val1, Val2, Val3, Val4, Val5)
) AS PivotTable;

Phần này nói rằng bạn đang tạo 5 cột mới có tên "Val1" đến "Val5". Các tên cột này đại diện cho giá trị trong cột Val. Vì vậy, dự kiến ​​rằng bảng của bạn sẽ chứa một cái gì đó như thế này

otherID   Val     amount
1         Val1    1
2         Val2    2
1         Val3    3
1         Val1    5
(etc)     (this column contains one of Val1 - Val5, or null)

Vì vậy, bây giờ bạn có 5 cột mới mà trước đây không tồn tại. Điều gì đi vào cột?

  • Bất kỳ cột nào xuất hiện trong OUTPUT không phải là cột PIVOTed đều là cột "GROUP BY".
  • Hàm tổng hợp là hàm thu thập tất cả dữ liệu vào ô là CHÉO giữa các cột GROUP BY và cột PIVOTED.

Vì vậy, để minh họa, sử dụng dữ liệu mẫu ở trên, chúng ta có otherID =1 và val =Val1. Trong bảng đầu ra, chỉ có một ô đại diện cho sự kết hợp Max (số tiền) này cho mỗi kết hợp (otherID / val)

otherID   Val1   Val2   Val3   Val4   Val5
1         <x>    ...    ...    ...    ...
(etc)

Đối với ô được đánh dấu <x> , chỉ một giá trị được phép, vì vậy <x> không được chứa nhiều amount các giá trị. Đó là lý do tại sao chúng ta cần tổng hợp nó, trong trường hợp này là sử dụng MAX(amount) . Vì vậy, trên thực tế, đầu ra trông như thế này

(unpivoted columns)   (pivoted, creates "new" columns)
otherID             |  Val1          Val2           Val3   Val4   Val5
1                   |  MAX(amount)   Max(amount)    << cell value = aggregate function
(etc)

Câu lệnh SELECT là những gì sau đó xuất ra các cột này

SELECT OtherID, Val1, Val2, Val3, Val4, Val5



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sử dụng SSIS, Làm cách nào để tìm các thành phố có dân số đông nhất?

  2. SQL Server:nhóm theo liên tiếp

  3. Nhật ký giao dịch SQL Server - Phần 2

  4. Không thể tạo phiên bản của nhà cung cấp OLE DB Microsoft.Jet.OLEDB.4.0 cho máy chủ được liên kết rỗng

  5. Đếm số bản ghi được trả về theo nhóm bởi