Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Kueri paginasi menggunakan pengurutan pada kolom yang berbeda menggunakan ROW_NUMBER() OVER() di SQL Server 2005

Sederhana:

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

Ini akan mengurutkan pada NULL (DESC) jika urutan ASC dipilih, atau sebaliknya.

Biarkan fungsi ROW_NUMBER() bekerja pada ekspresi ORDER BY yang sama.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tidak dapat masuk ke SQL Server dengan Otentikasi Windows

  2. Cara Mendeteksi jika Nilai Berisi Setidaknya Satu Nomor di SQL Server

  3. Cara memangkas asosiasi duplikat untuk menghasilkan satu set terlengkap yang unik

  4. Tidak Dapat Terhubung ke Server - Kesalahan terkait jaringan atau spesifik contoh

  5. Memasukkan data dari DataGridView ke database