Sql Row_number fonksiyonu ile satırlara numara vermek Kullanımı
Sql’de Row_number fonksiyonu kayıtları listelerken satır numarası vermek için kullanılır. Fakat kayıtlara satır numarası verirken sorgudaki gibi tüm kayıtlara aynı numarayı vermek istemeyebilirsiniz. Ürün gruplarınız olur ve aynı tek sorgu içinde o gruplara göre numara verebilirsiniz. Syntax olarak aşağıdaki gibidir. [1]
“ROW_NUMBER ( )
OVER ( [ PARTITION BY value_expression , … [ n ] ] order_by_clause )”
Row_number fonksiyonu ms-sql de Over() ile kullanıyoruz. Bildiğim kadarıyla oracle’da over kelimesini kullanmadan yazıyoruz. Over yazdıktan sonra mutlaraka “order by” kullanmamız gerekiyor. Order by ile numara verirken neye göre sıralayıp numara vereceğini belirtiyoruz. Eğer sorgumuzda belirli durumlara göre sıralama yapmasını istiyorsak order by kelimesinden önce “PARTITION BY” yukarıdaki söz dizimindeki gibi yazmamız gerekiyor ve burada hangi alanlara göre gruplayıp sıralama yapacağım alanları yazıyoruz. Hangi alanlara göre gruplama yapmak istiyorsak spesifik olarak o alanları yazmamız gerekiyor.
Herkesin aşina olduğu öğrenci,bölüm ve gno sıralamasının olduğu bir tablo da anlatmak istiyorum . Öğrenci Bölüm ve genel not ortalamasının olduğu bir tablo oluşturdum.
gno sıralamasına göre listeyi oluşturup ona göre sıra numarası vermek istiyorum . onun için hiç bir koşul yazmadan row number da order by kullanmam gerekiyor. Sıralamayı aşağıdaki kod ile yapıyorum.
SELECT ROW_NUMBER() over(order by gno desc) as sıra, ogrenci, birim, gno FROM tablo;
Şİmdi bölüme göre gruplayıp ona göre sıralama yapalım.onun için PARTITION BY anahtar sözcüğünü kullanacağız.Bende alanlar az olduğu için birime göre ayırıp ona göre sıralama yapacağım.sizde bu alanlar değişebilir. Sizde virgül koyarak gruplayacağınız kolonları yazarsınız.
SELECT ROW_NUMBER() over(PARTITION BY Birim order by gno desc) as sıra, ogrenci, birim, gno FROM tablo