SQL Server’da Distinct ile Row_Number Fonksiyonu Kullanımı

Herkese merhaba,

Bu yazıda SQL Server’da Distinct ile Row_Number fonksiyonu kullanımından bahsedeceğim.

Aslında bu makaleyi yazma fikri kod yazarken ortaya çıktı.

Bir tablodan veri çekerek başka bir tabloya insert işlemi yapıyordum. Tabi ki bu tablo üzerinde tekrar eden satırlar mevcuttu. Bu satırları Distinct yardımı ile teke düşürdüm fakat Row_Number fonksiyonunu uyguladığım zaman tekrar eden satırların yeniden geldiğini aslında Distinct yapamadığımı fark ettim.

Konu hakkında acaba benim gibi hata yapan oldu mu diye aranırken aslında pek de bir şey bulamadım. Sadece küçük bir örnek gözüme çarptı ve bu örnekten yola çıkarak sorgumu başarı ile oluşturdum. (Tabi bu yazı İngilizceydi ve hemen Türkçe bir makale yazma gereği duydum.)

Şimdi bu işlemi Northwind veritabanını kullanarak örneklendirmeye çalışacağım ki sizin de başınıza gelirse benzer çözüm uygulayabilirsiniz.

Northwind veritabanı üzerinde kullanacağım tablo [Order Details] tablosudur.

Şimdi bu tabloya Select çekelim.

SELECT *
FROM dbo.[Order Details];

Sonucu aşağıda görmektesiniz. Tekrar eden satırlar mevcut.

SQL Server'da Distinct ile Row_Number Fonksiyonu Kullanımı

Toplam satır sayısını incelediğimizde ise 2155 satır olduğunu görmektesiniz.

SQL Server'da Distinct ile Row_Number Fonksiyonu Kullanımı

Şimdi tablomuzda OrderID alanına Distinct çekerek kaç satır veri geldiğini tekrar kontrol edelim. Sorgusu aşağıdadır.

SELECT DISTINCT
       OrderID
FROM dbo.[Order Details];

Sorguyu çalıştırdığınız zaman aşağıdaki sonucu göreceksiniz.

SQL Server'da Distinct ile Row_Number Fonksiyonu Kullanımı

Görüldüğü üzere satırlar teke düşmüş oldu. Toplam satır sayısını kontrol edelim.

SQL Server'da Distinct ile Row_Number Fonksiyonu Kullanımı

Toplam satır sayısı 830 geldi.

Şimdi gelelim esas meseleye. OrderID sütunundan sonra Row_Number fonksiyonunu kullanalım. Kodu aşağıda görmektesiniz.

SELECT DISTINCT
       OrderID,
       ROW_NUMBER() OVER (ORDER BY OrderID ASC) AS SıraNo
FROM dbo.[Order Details];

Kodu çalıştırdığımız zaman Distinct ifadesinin çalışmadığını göreceksiniz. Sonucu aşağıda görmektesiniz.

SQL Server'da Distinct ile Row_Number Fonksiyonu Kullanımı

Görüldüğü üzere 2155 satır sonuç geldi. Bizim istediğimiz bu değildi. 830 satır gelmesini ve Row_Number fonksiyonunun 1’den başlayıp 830’a kadar numara vermesini istiyoruz.

Peki çözümü nasıl sağlayacağız?

Çözümü Distinct ifadesi ile bir sorgu oluşturmak ve bunu bir tablo gibi gösterip (iç tablo haline getirmek) dış tabloda Row_Number fonksiyonunu kullanmak.

Ne demek istiyorum kod üzerinde görelim.

SELECT ICTABLO.OrderID,
       ROW_NUMBER() OVER (ORDER BY ICTABLO.OrderID) AS SıraNo
FROM
(SELECT DISTINCT OrderID FROM dbo.[Order Details]) AS ICTABLO;

Sorguyu çalıştırdığınız zaman aşağıdaki sonucu göreceksiniz.

SQL Server'da Distinct ile Row_Number Fonksiyonu Kullanımı

Görüldüğü üzere istediğimiz gibi kayıtları teke düşürüp numaralandırdık.

Herkese çalışma hayatında ve yaşamında başarılar kolaylıklar.

198 Kez Okundu

Yavuz Selim Kart

Yazılım ve veri tabanında bildiklerimi anlatmaya gayret ediyorum. Halen birçok programlama dili üzerinde araştırmalar yaparak kendimi geliştiriyorum. Bunlar haricinde Grafik Tasarım ve Wordpress konularına da ilgim bulunmakta. SEO ve Sosyal medya yönetimleri hakkında da bilgim mevcuttur. Kısaca çok çalışmayı seven azimli biriyim.

Aşağıdaki Yazılar da İlginizi Çekebilir

Yazı kopyalamak yasaktır!