Di sql server 2005 terdapat sebuah fungsi baru yaitu row_number. Fungsi ini akan mengembalikan nomor record secara berurutan berdasarkan kolom tertentu. Nomor record yang dihasilkan tidak dipengaruhi oleh nilai suatu kolom yang dijadikan acuan untuk penomoran record tsb. Ok...misalkan saya akan menampilkan data dari database AdventureWorks tabel Production.Product
hasilnya :
ProductID Name
----------- --------------------------------------------------
1 Adjustable Race
879 All-Purpose Bike Stand
712 AWC Logo Cap
3 BB Ball Bearing
2 Bearing Ball
877 Bike Wash - Dissolver
316 Blade
843 Cable Lock
952 Chain
324 Chain Stays
(10 row(s) affected)
sekarang saya akan gunakan fungsi row_number pada query di atas:
Select Top 10 row_number() Over(Order By ProductID) As NomorRec ,
ProductID, [Name] From Production.Product
hasilnya :
NomorRec ProductID Name
-------------------- ----------- --------------------------------------------------
1 1 Adjustable Race
2 2 Bearing Ball
3 3 BB Ball Bearing
4 4 Headset Ball Bearings
5 316 Blade
6 317 LL Crankarm
7 318 ML Crankarm
8 319 HL Crankarm
9 320 Chainring Bolts
10 321 Chainring Nut
(10 row(s) affected)
fungsi row_number digunakan dengan keyword Over untuk mengurutkan data berdasarkan kolom yang diinginkan. Setelah keyword Over, anda masukkan kolom yang akan anda jadikan sebagai patokan hasilnya nanti bisa secara ASC (default) atau Desc...sekarang saya modifikasi lagi query diatas menjadi :
Select Top 10 row_number() Over(Order By ProductID Desc) As NomorRec ,
ProductID, [Name] From Production.Product
hasilnya :
NomorRec ProductID Name
-------------------- ----------- --------------------------------------------------
1 999 Road-750 Black, 52
2 998 Road-750 Black, 48
3 997 Road-750 Black, 44
4 996 HL Bottom Bracket
5 995 ML Bottom Bracket
6 994 LL Bottom Bracket
7 993 Mountain-500 Black, 52
8 992 Mountain-500 Black, 48
9 991 Mountain-500 Black, 44
10 990 Mountain-500 Black, 42
(10 row(s) affected)
Sekarang kita bandingkan dengan query dibawah ini :
Select Top 10 row_number() Over(Order By ProductID) As NomorRec ,
ProductID, [Name] From Production.Product
Order By ProductID Desc
hasilnya :
NomorRec ProductID Name
-------------------- ----------- --------------------------------------------------
504 999 Road-750 Black, 52
503 998 Road-750 Black, 48
502 997 Road-750 Black, 44
501 996 HL Bottom Bracket
500 995 ML Bottom Bracket
499 994 LL Bottom Bracket
498 993 Mountain-500 Black, 52
497 992 Mountain-500 Black, 48
496 991 Mountain-500 Black, 44
495 990 Mountain-500 Black, 42
(10 row(s) affected)
Ok...apa bedanya? Kalau kita gunakan sorting pada kolom setelah keyword Over maka hasilnya akan langsung di sorting pada ke sepuluh record tsb. Akan tetapi kalau kita lakukan sorting pada kolom seperti query diatas maka semua record yang ada pada tabel tsb akan di fetch semua kemudian baru di sorting untuk ke sepuluh baris tsb dan hasilnya berpengaruh terhadap NomorRec yang dihasilkan.
Jadi apa gunanya secara aplikatif fungsi row_number tsb?? Salah satu kegunaannya yaitu kita bisa membuat control DataList atau Repetear (control pada asp.net) yang mempunyai fitur Paging dengan memanfaatkan fitur tsb...fitur ini sudah saya gunakan di web site saya ini yaitu di menu Photo Gallery...disitu saya gunakan control DataList yang di paging dengan memanfaatkan fungsi row_number tsb...Ingin tau caranya? saya akan berikan nanti step by step pembuatannya on the next article, so stay tuned :)
Seperti yang kita ketahui control DataList dan Repeater tidak mempunyai fitur paging seperti halnya DataGrid (asp.net control)...control DataGrid pada winforms application tidak mendukung adanya fitur paging secara default, so bagaimana caranya untuk melakukan paging DataGrid winforms application?? Anda bisa melihatnya di artikel ini
Ok...c u on the next article...have a nice coding...