Derinlemesine yazılım eğitimleri için kanalımı takip edebilirsiniz...

Transact SQL – ROW_NUMBER() Fonksiyonu

Merhaba,

Hemen bir soruyla başlayalım.
Transact SQL’de, Select sorgusu neticesinde yapısal olarak elde ettiğimiz tabloların satır index numaralarına ihtiyacımız olabilir mi?
Evet…
Oluyormuş 🙂

Bu gün ileri derece kompleks bir sorgu yazmak zorunda kaldım ve tabi bu sorguda ROW_NUMBER() fonksiyonunu kullandım. Haliyle sonraki yazılarımda ele alacağım o kompleks yaklaşımdan önce ilgili fonksiyonumuza özel bloğa bir not almada fayda görmekteyim.

O halde Nedir bu ROW_NUMBER fonksiyonu? sorusundan başlayalım.

Eğer ki, veritabanınızda tekrar eden datalar varsa ve bu datalar arasında ayrım yapmak yahut sıralamak vs. gibi işlemler yapmak istiyorsanız ROW_NUMBER() fonksiyonu imdadınıza erişebilir. Temelde işlevi her bir satıra karşılık primary kolonundan bağımsız olarak sıralı bir index numarası atanmış kolon tanımlamaktır. Ama bilmemiz gereken ROW_NUMBER() fonksiyonu OVER() fonksiyonu ile birlikte kullanılmaktadır.

Aşağıda bir tabloya nasıl index numarası eklendiğinin prototipini inceleyebilirsiniz.

Select ROW_NUMBER() OVER(order by KOLONAdi) Indexer, * from Tablo

Gördüldüğü üzere, OVER fonksiyonu içerisinde order by komutundan sonra belirtilen kolona özel index numarası ayarlanmakta, ee doğal olarak her bir satıra özel index numarası oluşturulup, “Indexer” ismi verilen kolonda listelenmektedir.

Şimdi aşağıdaki örneği inceleyelim.
Transact SQL - ROW_NUMBER() Fonksiyonu
Görüldüğü üzere Adi kolonuna özel index numaraları oluşturulmuştur.

Peki bu tabloda order by ile sıralama yaparsak sonuç ne olacaktır? bakalım…
Transact SQL - ROW_NUMBER() Fonksiyonu
Dikkat ederseniz eğer, index numaralarını Adi kolonu için oluşturduğumuzdan herhangi bir duruma göre sıralama sonucunda index numaraları oluşturuldukları veriye özel olarak ve sabit bir şekilde kalmaktadır.

Şimdi de bir tabloda tekrar eden datalar içerisinde gruplama işlemi yaparak indexlemenin prototipini inceleyelim.

Select ROW_NUMBER() OVER(partition by Kolon1 order by Kolon2) Indexer, * from Tablo

Dikkat ederseniz eğer “partition by” komutu ile Tablo içerisindeki Kolon1 isimli kolonu gruplamakta ve grup içerisinde düzenli index numarası vermekte ve “order by” ile de sıralama gerçekleştirmektedir.

Aşağıdaki örnek gayet açıklayıcıdır.
Transact SQL - ROW_NUMBER() Fonksiyonu
İyi bakın… Her bir grup kendi içerisinde elemanlarına index numarası vermektedir… 😉

Ayrıca içeriğimizin önceki satırlarında bahsettiğimiz gibi elimizdeki sorguya order by çektiğimiz zaman index numaraları ilk başta verilen satırlara özel olarak kalmakta, değişmemektedir.
Transact SQL - ROW_NUMBER() Fonksiyonu

Evet… Görüldüğü üzere ROW_NUMBER() fonksiyonu oldukça işlevsel ve yetenek barındıran bir özelliğe sahiptir.

Bu fonksiyonla tanıştığıma çok memnun oldum 🙂
Sonraki yazılarımda görüşmek üzere…
İyi çalışmalar…

Bunlar da hoşunuza gidebilir...

2 Cevaplar

  1. 17 Şubat 2017

    […] de bambaşka bir konuyu ele alalım. ROW_NUMBER() fonksiyonunu. Bu fonksiyon kullanıldığı tabloda kullanıldığı kolona özel index numarası […]

  2. 01 Mart 2017

    […] satırındaki veriyi elde edelim. Bu işlemi şu şekilde bir yaklaşım sergileyerek yapacağız. ROW_NUMBER fonksiyonu ile elde ettiğimiz tabloya bir indexer kolonu ekleyeceğiz. Haliyle bu kolon […]

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir