ROW_NUMBER() Fonksiyonu
Row_Number() fonksiyonu , OLAP (Online Analytical Processing) fonksiyonlarindan en çok kullanilanlardan bitanesi. MSSQL Analysis Service'te DMX sorgulariyla kullanilan bu yapiya ait bir kaç fonksiyonuda T-SQL ile kullanabiyoruz. Görevi aslinda çok basit,sorgu sonucuda gelen kayitlariniza sira numarasi vermeye ve bölümlemeye yarar. Fakat bu küçük özellik bazen çok isinize yariyabilir.
Örnegin;
Asagidaki script’i SQL’serverinizda çalistirin ve örnekte kullanacagimiz tabloyu olusturalim.
CREATE TABLE [dbo].[urunler](
[id] [numeric](18, 0) IDENTITY(1,1) NOT NULL,
[urun] [varchar](50) NULL,
[sgiris] [smalldatetime] NULL
)
Asagidaki sekildede verilerimizi girelim.

Ufak bir örnek yaparak Row_Number() fonksiyonunu nasil çalistigina bakalim.
SELECT ROW_NUMBER() OVER(ORDER BY urun) AS sira,* FROM urunler

Test ettiginizde urunler tablonuzun urun kolonuna göre sirali ver her satir için bir sira numarasi verdigini göreceksiniz. Burada bilmeniz gereken Row_Number() fonksiyonu OVER ifadesiyle çalisir ve tablonuzu hangi kolon yada kolonlara göre nasil siralanacagini belirtmeniz gerekir.
Bir baska örnek;
SELECT ROW_NUMBER() OVER(ORDER BY sgiris desc) AS sira,urun,sgiris FROM urunler
Burada ise tabloyu sgiris kolonuna göre siraladik ve bu düzene göre Row_Number() fonksiyonu sira numarasi verdi.
Örnegin Ürün stogumuza sondan 3. olarak giren ürünün ismini bulmak istersek,Row_Number() fonksiyonu ile bunu kolaylikla yapabiliriz.
SELECT urun from
(SELECT ROW_NUMBER() OVER(ORDER BY sgiris desc) AS sira,urun,sgiris FROM urunler) AS t WHERE sira=3
Row_Number() fonksiyonunu bir baska kullanimi iste partition by ifadesi iledir. Partition by ile ayni olan degerleri gruplayarak kendi içlerinde sira numaralari verebilirsiniz.
Örnegin;
SELECT ROW_NUMBER() OVER(partition BY urun ORDER BY urun) AS sira,*
FROM urunler ORDER BY urun
Sorgu sonucu asagidaki sekilde olacaktir.


