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.


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

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

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


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

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

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.


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

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.


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

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.

SQL Server tarafında kendini ilerletmeye çalışırken bildiklerini sürekli başkalarına aktaran, yazılım dünyasında (C#, Java, Python vb.) kendini güncel tutmaya çalışan, araştırma yapmaktan bıkmayan, meraklı, bilginin üzerine bilgi katmaktan mutluluk duyan bir yazılım eğitmeni ve kod sever. – Grafik tasarım dünyasında Indesign’ı anlatacak kadar iyi kullanabilen, Photoshop ve Illustrator’e de orta düzey hakimiyeti bulunan, internet üzerinde online kimya dergisi kurmuş ve bunu yüzbinlerce kişiye ulaştırmayı başaran bir grafik sever. -WordPress tarafında 5 adet web sitesi kurmuş, bu sistemler üzerine çalışan bir WordPress sever. -Sosyal medya üzerinde okumalara ve araştırmalara devam eden, kendi kurmuş olduğu kimya dergisini daha çok kişiye nasıl ulaştırırım diye düşünen ve bu konuda SEO çalışmaları üzerine kafa yoran bir Sosyal Medya sever. Kısaca çok çalışmayı seven, azimli biriyim.

Yazıyı Oylayın

0/50 Değerlendirme Puanı

Yazıyı Paylaşın

SQL Server Eğitimleri Kanalına Abone Olun

İlişkili Yazılar

Kimler Neler Demiş?

avatar
 
smilegrinwinkmrgreenneutraltwistedarrowshockunamusedcooleviloopsrazzrollcryeeklolmadsadexclamationquestionideahmmbegwhewchucklesillyenvyshutmouth
  Subscribe  
Bildir