aynı olan kayıtları birleştirmek

MS SQL Server veritabanı ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
Kullanıcı avatarı
sarp_halit
Üye
Mesajlar: 241
Kayıt: 17 Ara 2003 04:30
Konum: Cennet Fethiye
İletişim:

aynı olan kayıtları birleştirmek

Mesaj gönderen sarp_halit »

Merhaba arkadaşlar kolay gelsin. müşteriler isimli bir tablom var tabloda id ad soyad telefon tckimlik adres alanlarım var. dikkatsizlik sonucu aynı tckimlik numarasına ait hastalar iki kez girilmiş. yani id hariç her şey aynı. bu kayıtları bulunca kart birleştir deyip bir bu kayıtları tek id ile birleştirmek istiyorum. yalnız dikkat edilmesi gereken bir nokta daha var. bu id ler başka bir tabloda da kullanılıyor.


teşekkür ederim iyi forumlar dilerim.
Fethiye den herkese sevgiler ...
X))@:>
Kullanıcı avatarı
Lost Soul
Üye
Mesajlar: 1064
Kayıt: 01 Nis 2007 02:55
Konum: mekan ANKARA toprak ELAZIĞ
İletişim:

Re: aynı olan kayıtları birleştirmek

Mesaj gönderen Lost Soul »

hastaların tutulduğu tabloyu order by TCKIMLIK ile sıralayın.
while not eof ile
baştan sonra tarama yapın.

tarama yaparken oncekikayitTCNO ve oncekikayitID diye iki değişken tutun

sonraki kayda gelip eğer bu kayıt eşit önceki kayıt ise

diğer tablolar işçin aşağıdakine benzer bir sql çalıştırın.

Kod: Tümünü seç

if TaramaYaptigimTablo.fieldByName('TCKIMLIKNO').AsString=OncekiKayitTCNO then
Begin
  query.sql.add('Update detailtablom set hasta_ID_Alani=:PARAMETREM1 where hasta_TCNO_alani=:PARAMETREM2'); 
  query.parambyname('PARAMETREM1').Asinteger:=OncekiKayitID;
  query.ParamByName('PARAMETREM2').AsString:=OncekiKayitTCNO;
  .....
şeklinde  tüm etkilenen tablolar için buna bezer queryler oluşturun.

sonra 
TaramaYaptigimTablo.Delete;// ile bu silin

End
else
Begin
oncekikayitTCNO :=TaramaYaptigimTablo.fieldByName('TCKIMLKNO').Asstring;
oncekikayitID:=TaramaYaptigimTablo.fieldByName('HASTAID').Asstring;
TaramaYaptigimTablo.Next;//eğer eşleşme yoksa son kaydı güncelle ve sonraki kayda geç

End;


Cevapla