T-SQL ROW_NUMBER Fonksiyonu

ROW_NUMBER() fonksiyonu, SQL Server’da (T-SQL) sonuç kümesine sıralı satır numaraları atayan bir window fonksiyonudur.

Sql server üzerinde herhangi bir sorgunun satır index numaralarını ihtiyacımız olabilir. Aşağıdaki tablomuzda tablonun en başında olan ayrıca çekmiş olduğumuz select sorgusu sonucu gelmeyen bir indexer yapısı bulunmaktadır. Çünkü primary olan zamanla değişeceği için hiç bir zaman indexer yapısında olmayacaktır.

Aşağıdaki resimde 95 id değerini sahip işlemi sildiğimde sol tarafta tablo üzerinde olmayan indexer yapısının sıralamalı bir şekilde devam ettiği görülmektedir.

delete from tablo4 where id=95

Yukarıda sorunla karşılaşmamak için ilgili tabloya indexer eklenmesi gerekmektedir. Veritabanı üzerinde tekrar eden verilen varsa bu veriler arasında ayrım yapmak yada sıralamak gibi işlemler yapmak istiyorsak row_number fonksiyonu kullanılabilir. Temel de işlevi primary kolonundan bağımsız sıralı index numarası atanmış kolon numarası tanımlamaktadır.

Parametreler ve Bileşenler:

1. PARTITION BY (Opsiyonel):
Sonuç kümesini gruplara böler
Her grup için numaralandırma 1’den yeniden başlar
Belirtilmezse tüm sonuç kümesi tek grup olarak kabul edilir

2. ORDER BY (Zorunlu):
Satır numaralarının atanma sırasını belirler
ASC (artan) veya DESC (azalan) sıralama yapılabilir

1. Temel Komut:

SELECT ROW_NUMBER() OVER(order by Kolon_Adi) Indexer,*from Tablo

Aşağıdaki komutla id kolonu için bir indexer yapısı oluşturulur.

SELECT ROW_NUMBER() OVER(order by id) Indexer,*from Tablo4

10’dan önceki id değerleri silindikten sonra indexer kolon sırasının aynı sırada kaldığı görülmektedir.

Aşağıdaki resimde görüldüğü gibi yapılabilir.

Aşağıdaki resimde tablomuzu ilgili id kolonuna göre sıraladığımız zaman indexer kolonu ilgili id yapısının kaçıncı sırada olduğunu getirmektedir.

2. Temel Komut:

SELECT ROW_NUMBER() OVER(PARTITION BY Kolon_Adi2 order by Kolon_Adi1) Indexer,*from Tablo

PARTITION BY:Sonuç kümesini gruplara böler. Her grup için numaralandırma 1’den yeniden başlar. Belirtilmezse tüm sonuç kümesi tek grup olarak kabul edilir.

Aşağıdaki komutla satistarihine göre bir indexers yapısı oluşturuyor. Daha sonra group by ile belirtilen kolonda olan değerlere göre bir indexer yapısı oluşturmaktadır.

SELECT ROW_NUMBER() OVER(PARTITION BY MusteriID order by SatisTarihi) Indexer,*from Satislar

Bu makalede ROW_NUMBER fonksiyonunu detaylı bir şekilde görmüş olduk.Başka makalede görüşmek dileğiyle..

“İman edip de iyi davranışlarda bulunanlara gelince, onlar için çok merhametli olan Allah, (gönüllerde) bir sevgi yaratacaktır.” Meryem Suresi; 96. Ayet

Author: Yunus YÜCEL

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir