SQL Server’da CTE ve Row_Number Kullanarak Tekrarlanan Kayıtları Silmek

Herkese merhaba,

Bu yazıda SQL Server’da CTE ve Row_Number kullanarak tekrarlanan kayıtların nasıl silineceğinden bahsedeceğim. İşlemi daha iyi anlamak için aşağıdaki örneğimizi inceleyelim.

--Tablo Oluşturma
CREATE TABLE Calisanlar
    (
      CalisanID INT ,
      Adi VARCHAR(20)
    )

--Tabloya insert işlemi
INSERT  INTO Calisanlar
VALUES  ( 1, 'Yavuz' )
INSERT  INTO Calisanlar
VALUES  ( 1, 'Yavuz' )
INSERT  INTO Calisanlar
VALUES  ( 2, 'Pelin' )
INSERT  INTO Calisanlar
VALUES  ( 3, 'Bilge' )
INSERT  INTO Calisanlar
VALUES  ( 3, 'Bilge' )
INSERT  INTO Calisanlar
VALUES  ( 3, 'Bilge' )  

--CTE Kullanımı
 WITH   CTE_CiftKayitlariSil
          AS ( SELECT   CalisanID ,
                        Adi ,
                        ROW_NUMBER() OVER ( PARTITION BY CalisanID, Adi ORDER BY CalisanID, Adi ) RowNumberKullan
               FROM     Calisanlar
             )
    DELETE  FROM CTE_CiftKayitlariSil
    WHERE   RowNumberKullan != 1


--Tablonun listelenmesi
 SELECT *
 FROM   Calisanlar

İlk olarak tablo oluşturduk. Sonrasında bu tablo içerisine benzer kayıtlar girdik. Hem CalisanId değeri hem de Adi değerleri aynı olan kayıtları tablomuza girdik. Bu işlem bittikten sonra CTE kullanarak çift kayıtları sildik. Benzer kayıtları silmek için kullandığımız yapı ise Row_Number fonksiyonudur. Row_Number fonksiyonu burada CalisanID ve Adi değerlerine göre benzer olanları gruplayıp numaralandırıyor. Delete kısmında ise numarası birden farklı olanları sil diyoruz ve işlem tamamlanmış oluyor.

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

374 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.

You may also like...

Yazı kopyalamak yasaktır!