sql >> Database teknologi >  >> RDS >> Sqlserver

Sideinddelt forespørgsel ved hjælp af sortering på forskellige kolonner ved hjælp af ROW_NUMBER() OVER () i SQL Server 2005

Simpelt:

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

Dette vil sortere på NULL (DESC), hvis ASC-rækkefølge er valgt, eller omvendt.

Lad funktionen ROW_NUMBER() arbejde over det samme ORDER BY-udtryk.




  1. MySQL LIKE + php sprintf

  2. MySQL-grupper efter intervaller i et datointerval

  3. Android - Hvordan kan jeg videregive data relateret til to tabeller til en indsættelsesmetode fra en indholdsudbyder

  4. Føj dage til en dato i PostgreSQL