Fungsi baru row_number di SQL Server 2005

Posted at : Feb/19/2007
12561 Views | 6 Comments

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

Select Top 10 ProductID, [Name] From 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...


[Comments]

Dodi (Nov/18/2008 02:46:20)
salam kang rully saya pake juga untuk paging tanpa harus adding column di code behind. it's great, make efficency i coding Terus sharing elmuna kang
Handi (Dec/05/2008 01:09:05)
Mantappp..nuhun elmuna...
ConsultanT (Jun/30/2009 01:52:21)
waah... baru tahu saiya. musti belajar lagi nech. :)
Agus (Sep/02/2010 12:57:06)

Wach dapat ilmu baru nich....dan bolehkah saya ajukan pertanyaan, dapatkah kita menggunakan row_number() sebagai kunci yg unik untuk meng-update row tertentu. Contoh kasus akan mengisi 12 row yang sdh diseleksi dan meng-update kolom ANGS dengan angka 1 - 12.

Terima kasih solusinya

Agus

Rully (Sep/09/2010 05:49:52)

Agus > Bisa mas, dengan menggunakan Common Table Expression (CTE), nanti akan saya berikan contohnya di web ini :)

games news (May/16/2011 02:25:16)

ilmu baru, thanks mas


[Write your comment]

Name (required)

Email (required-will not published)

 
Comment
pfog
Input code above below (Case Sensitive) :

ABOUT ME

Rully Yulian MF
Rully Yulian Muhammad Firmansyah | Founder & IT Trainer Native Enterprise | MCT (2008-2019) | MVP (2009-2016) | Xamarin Certified Professional | MTA | MCAD | MCPD | MOS | Bandung, West Java, Indonesia.

[Read More...]

TOP DOWNLOAD

Mapping Hak Akses User Pada MenuStrip Sampai Control Button
downloaded 6982 times

Bagaimana caranya menginstal database ketika deploying sebuah aplikasi?
downloaded 4893 times

Simple Voice Engine Application With Sound Player Class...
downloaded 4045 times

Change Group,Sort Order, Filtering By Date in Crystal Reports
downloaded 3460 times

WinForms DataGrid Paging With SqlDataAdapter
downloaded 2881 times


LINKS

CERTIFICATIONS

Xamarin Certified
MOS 2007
MCT
MCPD
MCTS
MCAD.NET
ASP.NET Brainbench

NATIVE ENTERPRISE

Native Enterprise - IT Training

FOLLOW ME

Youtube  Facebook  Instagram  LinkedIn   Twitter

RSS


NATIVE ENTERPRISE NEWS

© Copyright 2006 - 2024   Rully Yulian MF   All rights reserved.