Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Пагинирана заявка, използваща сортиране на различни колони, използвайки ROW_NUMBER() OVER () в SQL Server 2005

Просто:

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

Това ще сортира по NULL (DESC), ако е избран ASC ред, или обратното.

Нека функцията ROW_NUMBER() работи върху същия израз 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. Как да използвате семантично търсене в SQL Server

  2. Брой дни от седмицата в диапазон от дати в TSQL

  3. Преобразувайте „datetimeoffset“ в „datetime“ в SQL Server (T-SQL примери)

  4. Пуснете таблицата, след което не можете да създадете отново таблица със същото име

  5. TDS сървър - Използвайте Transact-SQL (T-SQL) изявления за работа с данни на Salesforce в SQL Server