5 Kasım 2013 Salı

MS SQL Serverdaki bir tabloda bir çok satırı aynı olan tabloda tekilleştirme

MS SQL Serverdaki bir tabloda bir çok satırı aynı olan tabloda tekilleştirme yapmak.
 
Değerleri aynı olan alanlara göre gruplandırıp bunlardan farklı olan ID sütünu (yoksa IDENTITY autoincrement bir sütun oluşturmak lazım)
minimum veya maksimum olanı seçecek şekilde bir iç sorgu yazıyoruz..
 
Select min(ID) as ID, aynisutun1,aynisutun2, aynisutun3,aynisutun4
from tblTABLO group by aynisutun1,aynisutun2, aynisutun3,aynisutun4

 bu sorgu ile aynı olan satırlardan sadece birisi gelir. (IDsi en küçük olan )

sonra bu tabloyu tüm tablo ile join edip birleşmeyenleri (çift kayıtlardan ID'si en küçük olmayanlar) sileriz.
 

DELETE tblTABLO
--- select *      --- test etmekte fayda var.
from tblTABLO
left outer join
(select min(ID) as ID, aynisutun1,aynisutun2, aynisutun3,aynisutun4
 from tblTABLO group by aynisutun1,aynisutun2, aynisutun3,aynisutun4 )
 as KorunacakKayitlar
 on tblTABLO.ID=KorunacakKayitlar.ID
 where KorunacakKayitlar.ID is null