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

Truy vấn được phân trang bằng cách sử dụng sắp xếp trên các cột khác nhau bằng ROW_NUMBER () OVER () trong SQL Server 2005

Đơn giản:

SELECT
  OrderID, CustomerID, EmployeeID, OrderDate, ShippedDate,
  @Offset, @Limit, @SortColumn, @SortDirection
FROM
  Orders
WHERE
  ROW_NUMBER() OVER 
  (
    ORDER BY
      /* same expression as in the ORDER BY of the whole query */
  ) BETWEEN (@PageNum - 1) * @PageSize + 1 AND @PageNum * @PageSize 
  /* AND more conditions ... */
ORDER BY
  CASE WHEN @SortDirection = 'A' THEN
    CASE @SortColumn 
      WHEN 'OrderID'    THEN OrderID
      WHEN 'CustomerID' THEN CustomerID
      /* more... */
    END
  END,
  CASE WHEN @SortDirection = 'D' THEN
    CASE @SortColumn 
      WHEN 'OrderID'    THEN OrderID
      WHEN 'CustomerID' THEN CustomerID
      /* more... */
    END 
  END DESC

Điều này sẽ sắp xếp trên NULL (DESC) nếu thứ tự ASC được chọn hoặc ngược lại.

Cho phép hàm ROW_NUMBER () hoạt động trên cùng một biểu thức ORDER BY.




  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 tạo số có phân phối chuẩn trong SQL Server

  2. Nhiều phiên bản của SQL Server sử dụng Entity Framework trong một ứng dụng ASP.NET duy nhất

  3. SSIS đọc nhiều tệp xml từ thư mục

  4. Tôi có thể sử dụng Kiểu dữ liệu ngày trong máy chủ sql như thế nào?

  5. Báo cáo cục bộ so với báo cáo Máy chủ trong kiểm soát trình xem Báo cáo ASP .Net