Paging di SQLSERVER

seandainya kita akan membuat halaman web untuk menampilkan data penjualan dari database adventurework 2012 [1] seperti pada query :

maka kit memerlukan solusi paging untuk itu. Karena jika query itu dijalankan maka akan menampilkan data sebanyak 121.317 baris.. tentu hal yang mustahil menampilkan data sebanyak itu dalam 1 halaman web saja.

pada sistem database yang lain misalnya mysql , postgresql atau sqlite maka akan dikenal keyword limit dan offset untuk melakukan paging [2], namun hal itu tidak berlaku di sqlserver.

untuk melakukan paging di sqlserver kita memerlukan beberapa langkah secara umum :

  1. Jadikan query menjadi nested query
  2. Berikan nomor pada masing – masing baris hasil nested query pada query baru kita
  3. filter hasil query berdasarkan nomor tersebut

untuk proses nomor 2 , kita dapat memanfaatkan function dari sqlserver yaitu row_number()  [3], seperti pada query :

setelah melakukan number maka kita dapat jadikan hal tersebut sebagai nested query dan memfilter datanya berdasarkan kolom number seperti pada query :

 

Paging pada SQLSERVER 2012

khusus pada sqlserver 2012 ke atas, paging dapat dilakukan dengan lebih simple dengan memanfaatkan keyword offset fetch [4], dengan langkah – langkah secara umum sebagai berikut :

  1. buat query dasar lengkap dengan pengurutan
  2. tambahkan keyword offset
  3. tambahkan keyword fetch

seperti pada query :

 

mudah bukan….

happy coding semua…

Referensi

[1] http://blog.sqlauthority.com/2012/03/15/sql-server-install-samples-database-adventure-works-for-sql-server-2012/

[2] http://stackoverflow.com/questions/971964/limit-10-20-in-sql-server

[3] https://msdn.microsoft.com/en-us/library/ms186734.aspx

[4] https://technet.microsoft.com/en-us/library/gg699618%28v=sql.110%29.aspx