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