Nó cung cấp tổng số đang chạy (chức năng này không được triển khai trong SQL Server cho đến phiên bản 2012 .)
ORDER BY
xác định cửa sổ được tổng hợp với UNBOUNDED PRECEDING
và CURRENT ROW
làm mặc định khi không được chỉ định. SQL Server mặc định là hoạt động kém hơn
RANGE
thay vì ROWS
.
Chúng có ngữ nghĩa khác nhau trong trường hợp ràng buộc trong cửa sổ cho RANGE
phiên bản không chỉ bao gồm hàng hiện tại (và các hàng trước đó) mà còn bao gồm bất kỳ hàng liên kết bổ sung nào có cùng giá trị a
như hàng hiện tại. Điều này có thể được nhìn thấy trong số hàng được tính theo từng hàng trong kết quả bên dưới.
SELECT a,
b,
COUNT(*) OVER (ORDER BY a
ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS [Rows],
COUNT(*) OVER (ORDER BY a
RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS [Range],
COUNT(*) OVER() AS [Over()]
FROM t;
Trả lại
a b Rows Range Over()
-------- -------- ----------- ----------- -----------
NULL NULL 1 4 12
NULL NULL 2 4 12
NULL NULL 3 4 12
NULL NULL 4 4 12
a b 5 7 12
a b 6 7 12
a b 7 7 12
c d 8 11 12
c d 9 11 12
c d 10 11 12
c d 11 11 12
e NULL 12 12 12
Để đạt được kết quả mà bạn mong đợi, hãy bỏ qua cả hai PARTITION BY
và ORDER BY
và sử dụng OVER()
trống mệnh đề (cũng được hiển thị ở trên).