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

Cách bao gồm các kết quả gắn với vị trí cuối cùng khi sử dụng mệnh đề TOP trong SQL Server

Khi sử dụng TOP trong một truy vấn trong SQL Server, bạn có thể gặp trường hợp hai hoặc nhiều kết quả buộc ở vị trí cuối cùng. Bạn có thể thậm chí sẽ không biết khi nào điều này xảy ra, vì hành vi mặc định của TOP là trả về không quá số hàng bạn chỉ định.

TOP mệnh đề chấp nhận WITH TIES đối số cho phép bạn chỉ định có bao gồm tất cả các kết quả gắn với vị trí cuối cùng hay không. Các hàng có thể đứng ở vị trí cuối cùng do ORDER BY của chúng cột chứa cùng một giá trị. Do đó, việc sử dụng đối số này có thể dẫn đến nhiều hàng được trả về hơn mức bạn thực sự chỉ định.

Ví dụ 1 - Dữ liệu

Đầu tiên, đây là dữ liệu chúng tôi sẽ làm việc với các ví dụ sau:

 CHỌN AlbumId, AlbumName, ArtistId TỪ Album; 

Kết quả:

 + ----------- + -------------------------- + ------- ----- + | AlbumId | AlbumName | ArtistId || ----------- + -------------------------- + -------- ---- || 1 | Powerslave | 1 || 2 | Nguồn điện | 2 || 3 | Hát Xuống Ngõ | 6 || 4 | Ziltoid the Omniscient | 5 || 5 | Thương vong của Cool | 5 || 6 | Epicloud | 5 || 7 | Một nơi nào đó trong thời gian | 1 || 8 | Piece of Mind | 1 || 9 | Kẻ giết người | 1 || 10 | Không cầu nguyện cho người chết | 1 || 11 | Không Có Âm Thanh Không Có Im Lặng | 9 || 12 | Big Swing Face | 4 || 13 | Đêm xanh | 12 || 14 | Vĩnh cửu | 12 || 15 | Scandinavia | 12 || 16 | Vali Lâu Mất | 7 || 17 | Khen ngợi và Đổ lỗi | 7 || 18 | Cùng Came Jones | 7 || 19 | Cả Đêm Sai | 3 || 20 | Mười sáu người đàn ông của Tain | 3 || 21 | Yo Wassup | 9 || 22 | Nhộn nhịp | 9 | + ----------- + -------------------------- + -------- ---- + 

Ví dụ 2 - Sử dụng TOP không ràng buộc

Đây là những gì sẽ xảy ra nếu chúng ta sử dụng TOP không có chỉ định WITH TIES . Đây là cách mà hầu hết mọi người sử dụng mệnh đề này.

Trong trường hợp này, tôi sắp xếp kết quả theo ArtistId .

 CHỌN ĐẦU (3) AlbumId, AlbumName, ArtistId TỪ AlbumsORDER THEO ArtistId ASC; 

Kết quả:

 + ----------- + ------------------- + ------------ + | AlbumId | AlbumName | ArtistId || ----------- + ------------------- + ------------ || 1 | Powerslave | 1 || 7 | Một nơi nào đó trong thời gian | 1 || 8 | Piece of Mind | 1 | + ----------- + ------------------- + ------------ +  

Như mong đợi, chúng tôi nhận được ba hàng. Đây là ba mục hàng đầu như được chỉ định bởi TOP mệnh đề.

Ví dụ 3 - Sử dụng TOP với Ties

Bây giờ cho các mối quan hệ. Đây là những gì sẽ xảy ra nếu chúng tôi thêm WITH TIES .

 CHỌN ĐẦU (3) VỚI TIES AlbumId, AlbumName, ArtistId TỪ AlbumsORDER BY ArtistId ASC; 

Kết quả:

 + ----------- + ------------------------- + -------- ---- + | AlbumId | AlbumName | ArtistId || ----------- + ------------------------- + --------- --- || 1 | Powerslave | 1 || 7 | Một nơi nào đó trong thời gian | 1 || 8 | Piece of Mind | 1 || 9 | Kẻ giết người | 1 || 10 | Không cầu nguyện cho người chết | 1 | + ----------- + ------------------------- + --------- --- + 

Bây giờ chúng ta có năm hàng thay vì chỉ ba hàng. Điều này là do có thêm hai hàng chia sẻ cùng một ArtistId như hàng thứ ba. Nói cách khác, ba hàng được xếp ở vị trí cuối cùng.

Lưu ý rằng trong SQL Server, thứ tự buộc các hàng được trả về là tùy ý.

Ví dụ 4 - Mệnh đề ORDER BY được sửa đổi để loại bỏ ràng buộc

Nếu chúng ta thêm AlbumId vào cột ORDER BY điều này loại bỏ hoàn toàn các ràng buộc.

 CHỌN ĐẦU (3) VỚI TIES AlbumId, AlbumName, ArtistId TỪ AlbumsORDER BY ArtistId ASC, AlbumId ASC; 

Kết quả:

 + ----------- + ------------------- + ------------ + | AlbumId | AlbumName | ArtistId || ----------- + ------------------- + ------------ || 1 | Powerslave | 1 || 7 | Một nơi nào đó trong thời gian | 1 || 8 | Piece of Mind | 1 | + ----------- + ------------------- + ------------ +  

Vì vậy, ngay cả khi chúng tôi chỉ định WITH TIES , không có cái nào trong trường hợp này.

Ví dụ 5 - Sử dụng mệnh đề WHERE

Đây là một ví dụ cuối cùng, trong đó tôi sử dụng WHERE mệnh đề để trích xuất một loạt các hàng từ giữa bảng. Ví dụ đầu tiên là không có ràng buộc và ví dụ thứ hai là có ràng buộc.

Không có ràng buộc:

 CHỌN ĐẦU (4) AlbumId, AlbumName, ArtistId FROM AlbumsWHERE AlbumId> 10ORDER BY ArtistId ASC; 

Kết quả:

 + ----------- + ------------------------- + -------- ---- + | AlbumId | AlbumName | ArtistId || ----------- + ------------------------- + --------- --- || 19 | Cả Đêm Sai | 3 || 20 | Mười sáu người đàn ông của Tain | 3 || 12 | Big Swing Face | 4 || 16 | Vali Lâu Mất | 7 | + ----------- + ------------------------- + --------- --- + 

Với các mối quan hệ:

 CHỌN ĐẦU (4) VỚI TIES AlbumId, AlbumName, ArtistId FROM AlbumsWHERE AlbumId> 10ORDER BY ArtistId ASC; 

Kết quả:

 + ----------- + ------------------------- + -------- ---- + | AlbumId | AlbumName | ArtistId || ----------- + ------------------------- + --------- --- || 19 | Sai Cả Đêm | 3 || 20 | Mười sáu người đàn ông của Tain | 3 || 12 | Big Swing Face | 4 || 16 | Vali Lâu Mất | 7 || 17 | Khen ngợi và Đổ lỗi | 7 || 18 | Cùng Came Jones | 7 | + ----------- + ------------------------- + --------- --- + 

  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 chuyển đổi chữ hoa thành chữ thường trong SQL Server - LOWER ()

  2. Trình kích hoạt Sql Server chèn các giá trị từ hàng mới vào một bảng khác

  3. Cắt giảm chi phí cấp phép SQL Server

  4. Tác động của sự kiện mở rộng query_post_execution_showplan trong SQL Server 2012

  5. T-SQL để tìm Tên máy chủ từ xa của máy chủ được liên kết