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

Tại sao không có hàm cửa sổ trong mệnh đề where?

tại sao tôi không thể sử dụng hàm cửa sổ trong mệnh đề where trong SQL Server?

Một câu trả lời, mặc dù không đặc biệt nhiều thông tin, là vì thông số kỹ thuật nói rằng bạn không thể.

Xem bài viết của Itzik Ben Gan - Xử lý truy vấn logic:Nó là gì và nó có ý nghĩa gì với bạn và cụ thể là hình ảnh ở đây. Các chức năng của cửa sổ được đánh giá tại thời điểm SELECT trên tập kết quả còn lại sau tất cả WHERE / JOIN / GROUP BY / HAVING các điều khoản đã được xử lý (bước 5.1).

thực sự tôi đang tìm kiếm lý do đằng sau việc không thể sử dụng các hàm gió trong mệnh đề where.

Lý do mà chúng không được phép trong WHERE là nó sẽ tạo ra sự mơ hồ. Đánh cắp ví dụ của Itzik Ben Gan từ T-SQL Hiệu suất cao bằng cách sử dụng các chức năng cửa sổ (tr.25)

Giả sử bảng của bạn là

CREATE TABLE T1
(
col1 CHAR(1) PRIMARY KEY
)

INSERT INTO T1 VALUES('A'),('B'),('C'),('D'),('E'),('F')

Và truy vấn của bạn

SELECT col1
FROM T1
WHERE ROW_NUMBER() OVER (ORDER BY col1) <= 3
AND col1 > 'B'

Kết quả đúng sẽ là gì? Bạn có mong đợi rằng col1 > 'B' vị ngữ chạy trước hay sau khi đánh số hàng?



  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ách cài đặt Azure Data Studio trên máy Mac

  2. 4 cách để lấy danh sách lịch biểu trong SQL Server Agent (T-SQL)

  3. Thêm một hàng tóm tắt với tổng số

  4. Sao chép dữ liệu vào một bảng khác

  5. SQL Server 2005 ROW_NUMBER () không có ORDER BY