Bạn có thể sử dụng GROUP BY SalesOrderID
. Sự khác biệt là, với GROUP BY, bạn chỉ có thể có các giá trị tổng hợp cho các cột không được bao gồm trong GROUP BY.
Ngược lại, bằng cách sử dụng các hàm tổng hợp được cửa sổ thay vì GROUP BY, bạn có thể truy xuất cả giá trị tổng hợp và không tổng hợp. Nghĩa là, mặc dù bạn không làm điều đó trong truy vấn mẫu của mình, nhưng bạn có thể truy xuất cả OrderQty
riêng lẻ các giá trị và tổng, số đếm, giá trị trung bình của chúng, v.v. trên các nhóm của cùng một SalesOrderID
s.
Đây là một ví dụ thực tế về lý do tại sao các tập hợp có cửa sổ lại tuyệt vời. Giả sử bạn cần tính phần trăm của tổng mỗi giá trị là bao nhiêu. Nếu không có tổng hợp có cửa sổ, trước tiên bạn phải lấy một danh sách các giá trị tổng hợp và sau đó nối nó trở lại tập hợp hàng ban đầu, tức là như sau:
SELECT
orig.[Partition],
orig.Value,
orig.Value * 100.0 / agg.TotalValue AS ValuePercent
FROM OriginalRowset orig
INNER JOIN (
SELECT
[Partition],
SUM(Value) AS TotalValue
FROM OriginalRowset
GROUP BY [Partition]
) agg ON orig.[Partition] = agg.[Partition]
Bây giờ, hãy xem cách bạn có thể làm điều tương tự với tổng hợp có cửa sổ:
SELECT
[Partition],
Value,
Value * 100.0 / SUM(Value) OVER (PARTITION BY [Partition]) AS ValuePercent
FROM OriginalRowset orig
Dễ dàng và sạch sẽ hơn nhiều phải không?