ROW_NUMBER() Fonksiyonu
Row_Number() fonksiyonu , OLAP (Online Analytical Processing) fonksiyonlarından en çok kullanılanlardan bitanesi. MSSQL Analysis Service'te DMX sorgularıyla kullanılan bu yapıya ait bir kaç fonksiyonuda T-SQL ile kullanabiyoruz. Görevi aslında çok basit,sorgu sonucuda gelen kayıtlarınıza sıra numarası vermeye ve bölümlemeye yarar. Fakat bu küçük özellik bazen çok işinize yarıyabilir.
Örneğin;
Aşağıdaki script’i SQL’serverınızda çalıştırın ve örnekte kullanacağımız tabloyu oluşturalım.
CREATE TABLE [dbo].[urunler](
[id] [numeric](18, 0) IDENTITY(1,1) NOT NULL,
[urun] [varchar](50) NULL,
[sgiris] [smalldatetime] NULL
)
Aşağıdaki şekildede verilerimizi girelim.
Ufak bir örnek yaparak Row_Number() fonksiyonunu nasıl çalıştığına bakalım.
SELECT ROW_NUMBER() OVER(ORDER BY urun) AS sira,* FROM urunler
Test ettiğinizde urunler tablonuzun urun kolonuna göre sıralı ver her satır için bir sıra numarası verdiğini göreceksiniz. Burada bilmeniz gereken Row_Number() fonksiyonu OVER ifadesiyle çalışır ve tablonuzu hangi kolon yada kolonlara göre nasıl sıralanacağını belirtmeniz gerekir.
Bir başka örnek;
SELECT ROW_NUMBER() OVER(ORDER BY sgiris desc) AS sira,urun,sgiris FROM urunler
Burada ise tabloyu sgiris kolonuna göre sıraladık ve bu düzene göre Row_Number() fonksiyonu sıra numarası verdi.
Örneğin Ürün stoğumuza sondan 3. olarak giren ürünün ismini bulmak istersek,Row_Number() fonksiyonu ile bunu kolaylıkla 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 başka kullanımı iste partition by ifadesi iledir. Partition by ile aynı olan değerleri gruplayarak kendi içlerinde sıra numaraları verebilirsiniz.
Örneğin;
SELECT ROW_NUMBER() OVER(partition BY urun ORDER BY urun) AS sira,*
FROM urunler ORDER BY urun
Sorgu sonucu aşağıdaki şekilde olacaktır.
Sinan UÇAR
MCP - MCAD - MCSD - MCDBA