sql >> データベース >  >> RDS >> Sqlserver

SQL Server 2005 で ROW_NUMBER() OVER () を使用して異なる列で並べ替えを使用するページ分割されたクエリ

    シンプル:

    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
    

    ASC 順が選択されている場合は NULL (DESC) で並べ替えられ、その逆も同様です。

    ROW_NUMBER() 関数が同じ ORDER BY 式で機能するようにします。




    1. クエリ文字列値を使用してデータベースからデータをクエリする方法

    2. MySQLiプリペアドステートメントとトランザクション

    3. MariaDBGaleraクラスター間で非同期レプリケーションをセットアップする方法

    4. MySqlのEFコア`update-database`が`__EFMigrationsHistory'が存在しないために失敗します`