Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Zapytanie podzielone na strony przy użyciu sortowania w różnych kolumnach przy użyciu ROW_NUMBER() OVER() w SQL Server 2005

Proste:

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

Spowoduje to sortowanie na NULL (DESC), jeśli wybrano kolejność ASC, lub odwrotnie.

Pozwól funkcji ROW_NUMBER() pracować nad tym samym wyrażeniem 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. Jak można tymczasowo wyłączyć ograniczenia klucza obcego za pomocą T-SQL?

  2. Dynamiczny obrót T-SQL

  3. Czy można ustawić limit czasu dla zapytania SQL w Microsoft SQL Server?

  4. Jak wykonać szybkie USUNIĘCIE dużej ilości danych z dużej tabeli (serwer sql)

  5. Zapytanie SQL Server z IN (NULL) nie działa