Anasayfa / Yazılım / SQL / ROW_NUMBER Fonksiyonu

ROW_NUMBER Fonksiyonu

ROW_NUMBER Fonksiyonu Microsoft SQL’de herhangi bir sorgunun sonucunda listelenen verilerin satırlarına sıralı olarak numara verilmesini sağlayan fonksiyondur. ROW_NUMBER Fonksiyonu içinde OVER ifadesini barındırır bu ifade ile ROW_NUMBER fonksiyonun numara vermede hangi kritere göre listelenmesi ile numara verileceğini belirlemek içindir aslında. Yani numara vermenin nasıl, neye göre, hangi listeleme kriterine göre olacağını belirtir. Tabi bu OVER ifadesi için ORDER BY deyimini de kullanmamız gerekiyor. ORDER BY olmalı ki hangi kolona göre sıralama yapılacak ve buna göre OVER nasıl davranacak bunu belirliyoruz. Bu sıralama değeri illa ki 1’den de başlamayabilir, istediğimiz bir değerden de başlatabilme imkanımız vardır ancak her şekilde artan 1 şeklindedir. Şimdi bir kaç örnekle konuyu pekiştirelim.

AdventureWorks veritabanı üzerinde çalışıyorum.

SELECT CustomerID, FirstName + ' ' + LastName AS "Ad Soyad",
ROW_NUMBER() OVER (ORDER BY FirstName, LastName) AS "Satır"
FROM Sales.Customer AS musteri INNER JOIN Person.Person AS Kisi
ON musteri.PersonID = Kisi.BusinessEntityID

Bu sorgum ile Sales.Customer ve Person.Person tabloları üzerinde CustomerID, FirstName ve LastName alanlarını listeliyorum. Bunu yapabilmek için INNER JOIN kullandım. FirstName ve LastName kolonlarını aralarında bir boşluk oluşacak şekilde FirstName + ‘ ‘ + LastName AS “Ad Soyad” diyerek Ad Soyad kolonunda listeliyorum. Burada listeleme yaparken OVER ve ORDER BY kullanarak FirstName kolonuna göre verilerin artan şekilde yani A’dan Z’ye olacak şekilde sıralanmasını sağlıyorum. Bu sıralama esnasında her bir satır eşsiz bir değeri ROW_NUMBER() fonksiyonu sayesinde alıyor.

2013020601

Şimdi bu seferde satır numaraları 1’den başlamasın 100’den başlasın ve öyle devam etsin. Farklı bir sorgu oluşturalım. Yalnız burada hatırlatmak istediğim bir konu var, ROW_NUMBER fonksiyonu WHERE deyimi ile birlikte kullanılamıyor. Dolayısı ile farklı bir yol izleyeceğim ve iç içe bir sorgu ile bu sorunu aşacağım. Aslında yaptığım işlem tamamen bir önceki sorgu ile aynı, syntax farkı var ve satır numaralarının 100’den başlamasını sağlıyorum.

WITH musteriler AS (
SELECT CustomerID, FirstName + ' ' + LastName AS "Ad Soyad",
ROW_NUMBER() OVER (ORDER BY FirstName, LastName) AS	"Satır"
FROM Sales.Customer AS musteri INNER JOIN Person.Person AS Kisi
ON musteri.PersonID = Kisi.BusinessEntityID
)
SELECT CustomerID, "Ad Soyad", "Satır"
FROM musteriler
WHERE "Satır" > 100
ORDER BY "Satır";

2013020602

Bir sonraki yazıda görüşmek üzere..

Bir cevap yazın

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