ROW_NUMBER() Fonksiyonu
Row_Number() fonksiyonu , OLAP (Online Analytical Processing)
fonksiyonlarindan en çok kullanilanlardan birtanesi. MSSQL Analysis
Service'te DMX sorgulariyla kullanilan bu yapiya ait bir kaç
fonksiyonuda T-SQL ile kullanabiliyoruz. Görevi aslinda çok basit,sorgu
sonucuda gelen kayitlariniza sira numarasi vermeye ve bölümlemeye yarar.
Fakat bu küçük özellik bazen çok işinize yarayabilir.
Örnegin;
Asagidaki script’i SQL’serverımızda çalıştıralım ve örnekte kullanacağımız veritabanını 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 şekilde verilerimizi girelim.
Ufak bir örnek yaparak Row_Number() fonksiyonunun nasıl çalıştığını görelim.
SELECT
ROW_NUMBER() OVER(
ORDER
BY
urun)
AS
sira,*
FROM
urunler
Test ettiginizde urunler tablonuzun urun kolonuna göre sıralı ver her satır için bir sıra numarasi verdigini göreceksiniz. Burada unutmamanız gereken Row_Number() fonksiyonunun OVER ifadesiyle çalışması ve tablonuzu hangi kolon yada kolonlara göre nasil sıralacağını belirtmenizin gerekmektediği.
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 ile sıra numarası verdik.
Örnegin Ürün stoğumuza 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() fonksiyonunun bir başka kullanımı iste partition by ifadesi iledir. Partition by ile ayni olan degerleri gruplayarak kendi içlerinde sira numaralari verebilirsiniz.
Örnek;
SELECT
ROW_NUMBER() OVER(partition
BY
urun
ORDER
BY
urun)
AS
sira,*
FROM
urunler
ORDER
BY
urun
Sorgusunu çalıştırdığımız zaman sonuç aşağıdaki şekilde olacaktır.