Eşit Olanları Tek Kayda Düşürmek

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
erdogan_ozkaya
Üye
Mesajlar: 806
Kayıt: 03 Eki 2007 01:00

Eşit Olanları Tek Kayda Düşürmek

Mesaj gönderen erdogan_ozkaya » 03 Nis 2012 07:49

Arkadaşlar,

Elimde bir liste var (100000 kişi ) listede adres bilgileri var amacımız listedeki herkese gazete göndermek (derneğimizin ücretsiz gazetesi) fakat aynı adreste birden fazla kişi olabiliyor yani,
ADRES_IL_ADI
ADRES_ILCE_ADI
KAPI_NO
DAIRE_NO

aynı olan 5 kayıt varsa 1'e düşürsün 4 tanesini gizlesin (silebilirde backup var :) )

Kod: Tümünü seç

SN	        varchar(50)	Checked
TC_NO    	varchar(50)	Checked
ADI	        varchar(50)	Checked
SOYADI	        varchar(50)	Checked
ANA_ADI 	varchar(50)	Checked
BABA_ADI	varchar(50)	Checked
CINSIYET	varchar(50)	Checked
DOGUM_YERI	varchar(50)	Checked
DOGUM_TARIHI	datetime	Checked
NUFUS_ILI	varchar(50)	Checked
NUFUS_ILCESI	varchar(50)	Checked
ADRES_IL_ADI	varchar(50)	Checked
ADRES_ILCE_ADI	varchar(50)	Checked
ADRES_MUHTARLIK	varchar(50)	Checked
ADRES_CAD_SOK	varchar(50)	Checked
KAPI_NO	        varchar(50)	Checked
DAIRE_NO	varchar(50)	Checked   

Eğer ekleyebilirsem bu koda eklemek istiyorum ama benim için önemli olan sonuç listeyi teke düşürsün de bu kod olmasada olur :)

Kod: Tümünü seç

Memo1.Clear;
  DERNEK_LISTE_DB.Close;
  DERNEK_LISTE_DB.sql.Clear;
  DERNEK_LISTE_DB.SQL.Add('SELECT * FROM DERNEK_TABLO WHERE (DOGUM_TARIHI BETWEEN :Tar1 and :Tar2)');
  DERNEK_LISTE_DB.Parameters.ParamByName('Tar1').Value := FormatDateTime('DD/MM/YYYY',DateTimePicker1.date);
  DERNEK_LISTE_DB.Parameters.ParamByName('Tar2').Value := FormatDateTime('DD/MM/YYYY',DateTimePicker2.date);

  if Edit3.Text<>'' then begin
  DERNEK_LISTE_DB.SQL.Add(' and ADI='+QuotedStr(Edit3.Text)+'');
  End;


  if Edit4.Text<>'' then begin
  DERNEK_LISTE_DB.SQL.Add(' and SOYADI='+QuotedStr(Edit4.Text)+'');
  End;



    Memo1.Lines.add(DERNEK_LISTE_DB.sql.text);
    DERNEK_LISTE_DB.Open;

    if DERNEK_LISTE_DB.Fields.Fields[0].Value= null then
    showmessage('                    Aradığınız Kriterlere uygun Kayıt Bulunamamıştır.                    ');
    if DERNEK_LISTE_DB.Fields.Fields[0].Value> null then
    ShowMessage('            Kriterlere Uygun  # ' + inttostr(DERNEK_LISTE_DB.RecordCount)+ ' #  Kişi Bulundu            ');
    StatusBar1.Panels[1].Text:='Kriterlere Uygun  # ' + inttostr(DERNEK_LISTE_DB.RecordCount)+ ' #  Kişi Bulundu            '
Teşekkürler

mkysoft
Kıdemli Üye
Mesajlar: 2991
Kayıt: 25 Ağu 2003 11:35
Konum: İstanbul
İletişim:

Re: Eşit Olanları Tek Kayda Düşürmek

Mesaj gönderen mkysoft » 03 Nis 2012 09:02

veri tabanı belirtmemişsiniz ben mysql için yazayım. tüm veri tabanlarında yapılabilir.
select kısmına distinct CONCAT(ADRES_IL_ADI,ADRES_ILCE_ADI,KAPI_NO,DAIRE_NO) as adres ekleyebilirsiniz.

erdogan_ozkaya
Üye
Mesajlar: 806
Kayıt: 03 Eki 2007 01:00

Re: Eşit Olanları Tek Kayda Düşürmek

Mesaj gönderen erdogan_ozkaya » 03 Nis 2012 09:15

HOCAM ÖNCELİKLE CEVABIN İÇİN ÇOK TEŞEKKÜR EDERİM, FAKAT SİZİN KADAR ÇOK BİLGİM YOK VERDİĞİNİZ KODU TAM OLARAK NEREYE VE NASIL EKLEYECEĞİM ACABA?

VT SQL 2005
DB DERNEK_LISTE
TABLO DERNEK_LISTE

Kullanıcı avatarı
CiTiZEN
Üye
Mesajlar: 1163
Kayıt: 06 Oca 2008 04:15

Re: Eşit Olanları Tek Kayda Düşürmek

Mesaj gönderen CiTiZEN » 03 Nis 2012 11:24

merhabalar, şu eşkilde olabilir:

Kod: Tümünü seç

'select distinct (ADRES_IL_ADI'+QuotedStr(' ')+'+ADRES_ILCE_ADI'+QuotedStr(' ')+'+KAPI_NO'+QuotedStr(' ')+'+DAIRE_NO) as adres from DERNEK_LISTE' 
Not: deneme fırsatım olmadı.
Kolay Gelsin.
UWESIS CORPORATION

erdogan_ozkaya
Üye
Mesajlar: 806
Kayıt: 03 Eki 2007 01:00

Re: Eşit Olanları Tek Kayda Düşürmek

Mesaj gönderen erdogan_ozkaya » 03 Nis 2012 01:51

Hocam cevabın için teşekkürler aşağıdaki gibi denedim olmadı

Kod: Tümünü seç

DERNEK_LISTE_DB.SQL.Add('select distinct (ADRES_IL_ADI'+QuotedStr(' ')+'+ADRES_ILCE_ADI'+QuotedStr(' ')+'+KAPI_NO'+QuotedStr(' ')+'+DAIRE_NO) as adres from DERNEK_LISTE');
yardımlarınız için minnettarım :) teşekkürler

erdogan_ozkaya
Üye
Mesajlar: 806
Kayıt: 03 Eki 2007 01:00

Re: Eşit Olanları Tek Kayda Düşürmek

Mesaj gönderen erdogan_ozkaya » 03 Nis 2012 05:19

ARKADAŞLAR KİMSE TABİ Kİ BAKMAK ZORUNDA DEĞİL FAKAT BİRAZ ACELE :) YOK MU CEVABINI BİLEN?

TEŞEKKÜRLER.

mkysoft
Kıdemli Üye
Mesajlar: 2991
Kayıt: 25 Ağu 2003 11:35
Konum: İstanbul
İletişim:

Re: Eşit Olanları Tek Kayda Düşürmek

Mesaj gönderen mkysoft » 03 Nis 2012 09:49

cevap hata mesajınızda gizli. olmadının anlamı nedir önce onu açıklarsanız daha iyi olur.

erdogan_ozkaya
Üye
Mesajlar: 806
Kayıt: 03 Eki 2007 01:00

Re: Eşit Olanları Tek Kayda Düşürmek

Mesaj gönderen erdogan_ozkaya » 04 Nis 2012 01:19

hocam, hata aşağıdaki gibi teşekkürler.

Resim

erdogan_ozkaya
Üye
Mesajlar: 806
Kayıt: 03 Eki 2007 01:00

Re: Eşit Olanları Tek Kayda Düşürmek

Mesaj gönderen erdogan_ozkaya » 04 Nis 2012 01:31

BU ŞEKİLDE YAPTIM HATA VERMEDİ AMA KOD DA ÇALIŞMADI ?

Kod: Tümünü seç


Memo1.Clear;
  DERNEK_LISTE_DB.Close;
  DERNEK_LISTE_DB.sql.Clear;
DERNEK_LISTE_DB.SQL.Add('SELECT DISTINCT ADRES_IL_ADI,ADRES_ILCE_ADI,KAPI_NO,DAIRE_NO, * FROM DERNEK_LISTE WHERE (DOGUM_TARIHI BETWEEN :Tar1 and :Tar2)');
  DERNEK_LISTE_DB.Parameters.ParamByName('Tar1').Value := FormatDateTime('DD/MM/YYYY',DateTimePicker1.date);
  DERNEK_LISTE_DB.Parameters.ParamByName('Tar2').Value := FormatDateTime('DD/MM/YYYY',DateTimePicker2.date);



if Edit3.Text<>'' then begin
  DERNEK_LISTE_DB.SQL.Add(' and ADI='+QuotedStr(Edit3.Text)+'');
  End;


  if Edit4.Text<>'' then begin
  DERNEK_LISTE_DB.SQL.Add(' and SOYADI='+QuotedStr(Edit4.Text)+'');
  End;



    Memo1.Lines.add(DERNEK_LISTE_DB.sql.text);
    DERNEK_LISTE_DB.Open;

    if DERNEK_LISTE_DB.Fields.Fields[0].Value= null then
    showmessage('                    Aradığınız Kriterlere uygun Kayıt Bulunamamıştır.                    ');
    if DERNEK_LISTE_DB.Fields.Fields[0].Value> null then
    ShowMessage('            Kriterlere Uygun  # ' + inttostr(DERNEK_LISTE_DB.RecordCount)+ ' #  Kişi Bulundu            ');
    StatusBar1.Panels[1].Text:='Kriterlere Uygun  # ' + inttostr(DERNEK_LISTE_DB.RecordCount)+ ' #  Kişi Bulundu            '

mkysoft
Kıdemli Üye
Mesajlar: 2991
Kayıt: 25 Ağu 2003 11:35
Konum: İstanbul
İletişim:

Re: Eşit Olanları Tek Kayda Düşürmek

Mesaj gönderen mkysoft » 04 Nis 2012 08:33

SELECT DISTINCT ADRES_IL_ADI,ADRES_ILCE_ADI,KAPI_NO,DAIRE_NO,
bu şekilde kullanırsanız sadece ADRES_IL_ADI'na göre birer kayıt getirecektir. Size üst mesajlarda vermiş olduğumuz örneklerde hangi alanlara göre tek kayıt gelmesini istiyorsanız o alanları birleştirmenizi tavsiye etmiştik. öncekikle alanları birleştirmeyi deneyin. mysql'de concat fonksiyonu ile yapılabiliyor bu. kendi veri tabanınızın metin birleştirme tekniğini öğrenin.@CiTiZEN alanların arasına + koyarak yapabileceğinizi söylemiş, SQL editörde önce deneyin.

erdogan_ozkaya
Üye
Mesajlar: 806
Kayıt: 03 Eki 2007 01:00

Re: Eşit Olanları Tek Kayda Düşürmek

Mesaj gönderen erdogan_ozkaya » 04 Nis 2012 09:05

sadece cad sok darire kapı no eklersem sorun yok ama adı soyadı vs diğerlerini ekleyincede olmuyor. alanların tamamını almıyor, eklediklerimin de tamamını sorguluyor yani

hocam, bilen bir arkadaşın yardımına ihtiyacım var beceremedim :) çoık araştırdım ama bir türlü çıkamıyorum işin içinden. :(

mkysoft
Kıdemli Üye
Mesajlar: 2991
Kayıt: 25 Ağu 2003 11:35
Konum: İstanbul
İletişim:

Re: Eşit Olanları Tek Kayda Düşürmek

Mesaj gönderen mkysoft » 05 Nis 2012 12:52

sorularınızı net yazmıyorsunuz, hata mesajlarını vermiyorsunuz. kullandığınız SQL'i yazmamışsınız.

erdogan_ozkaya
Üye
Mesajlar: 806
Kayıt: 03 Eki 2007 01:00

Re: Eşit Olanları Tek Kayda Düşürmek

Mesaj gönderen erdogan_ozkaya » 05 Nis 2012 08:06

HOCAM AŞAĞIDAKİ KODU YAZIYORUM BANA SADECE "ADRES_MUHTARLIK, ADRES_CAD_SOK, KAPI_NO, DAIRE_NO" GETİRİYOR

BUNLARI YAZINCA DA KABUL ETMİYOR (A_NO, A_SIRA_NO, A_ALAN BUNLARI ÇIKARTINCA KABUL EDİYOR BU SEFER İSTEDİĞİM SONUCU VERMİYOR)

SN, TC_NO, ADI, SOYADI, ANA_ADI, BABA_ADI, CINSIYET, DOGUM_YERI, DOGUM_TARIHI, NUFUS_ILI, NUFUS_ILCESI, ADRES_IL_ADI, ADRES_ILCE_ADI,ADRES_MUHTARLIK, ADRES_CAD_SOK, KAPI_NO, DAIRE_NO, A_NO, A_SIRA_NO, A_ALAN

BEN İSTİYORUM Kİ LİSTEME HEPSİ GELSİN (SN, TC_NO, ADI, SOYADI, ANA_ADI, BABA_ADI, CINSIYET, DOGUM_YERI, DOGUM_TARIHI, NUFUS_ILI, NUFUS_ILCESI, ADRES_IL_ADI, ADRES_ILCE_ADI,ADRES_MUHTARLIK, ADRES_CAD_SOK, KAPI_NO, DAIRE_NO, A_NO, A_SIRA_NO, A_ALAN) AMA "ADRES_MUHTARLIK, ADRES_CAD_SOK, KAPI_NO, DAIRE_NO" EĞER BUNLARDAN EŞİT OLANLAR VARSA GÖSTERMESİN


AYIN 15 DE GAZETE GELECEK VE ETİKET BASACAĞIZ AMAÇ BİR EVE BİR GAZETE GİTMESİ

KULLANDIĞIM KOD

Kod: Tümünü seç

  Memo1.Clear;
  DERNEK_LISTE_DB.Close;
  DERNEK_LISTE_DB.sql.Clear;


  DERNEK_LISTE_DB.SQL.Add('SELECT DISTINCT ADRES_MUHTARLIK, ADRES_CAD_SOK, KAPI_NO, DAIRE_NO FROM DERNEK WHERE (DOGUM_TARIHI BETWEEN :Tar1 and :Tar2)');

  //SN, TC_NO, ADI, SOYADI, ANA_ADI, BABA_ADI, CINSIYET, DOGUM_YERI, DOGUM_TARIHI, NUFUS_ILI, NUFUS_ILCESI, ADRES_IL_ADI, ADRES_ILCE_ADI,ADRES_MUHTARLIK, ADRES_CAD_SOK, KAPI_NO, DAIRE_NO, A_NO, A_SIRA_NO, A_ALAN

 DERNEK_LISTE_DB.Parameters.ParamByName('Tar1').Value := FormatDateTime('DD/MM/YYYY',DateTimePicker1.date);
 DERNEK_LISTE_DB.Parameters.ParamByName('Tar2').Value := FormatDateTime('DD/MM/YYYY',DateTimePicker2.date);

  if Edit3.Text<>'' then begin
  DERNEK_LISTE_DB.SQL.Add(' and ADI='+QuotedStr(Edit3.Text)+'');
  End;

  if Edit4.Text<>'' then begin
  DERNEK_LISTE_DB.SQL.Add(' and SOYADI='+QuotedStr(Edit4.Text)+'');
  End;

  if Edit5.Text<>'' then begin
  DERNEK_LISTE_DB.SQL.Add(' and TC_NO='+QuotedStr(Edit5.Text)+'');
  End;

  if Edit6.Text<>'' then begin
  DERNEK_LISTE_DB.SQL.Add(' and ANA_ADI='+QuotedStr(Edit6.Text)+'');
  End;

  if Edit7.Text<>'' then begin
  DERNEK_LISTE_DB.SQL.Add(' and BABA_ADI='+QuotedStr(Edit7.Text)+'');
  End;

  if ComboBox1.Text<>'HEPSİ' then begin
  DERNEK_LISTE_DB.SQL.Add(' and CINSIYET='+QuotedStr(ComboBox1.Text)+'');
  End;

  if Edit8.Text<>'' then begin
  DERNEK_LISTE_DB.SQL.Add(' and DOGUM_YERI='+QuotedStr(Edit8.Text)+'');
  End;

  if DBLookupComboBox1.Text<>'' then begin
  DERNEK_LISTE_DB.SQL.Add(' and NUFUS_ILI='+QuotedStr(DBLookupComboBox1.Text)+'');
  End;

  if DBLookupComboBox2.Text<>'' then begin
  DERNEK_LISTE_DB.SQL.Add(' and NUFUS_ILCESI='+QuotedStr(DBLookupComboBox2.Text)+'');
  End;

  if DBLookupComboBox3.Text<>'' then begin
  DERNEK_LISTE_DB.SQL.Add(' and ADRES_IL_ADI='+QuotedStr(DBLookupComboBox3.Text)+'');
  End;

  if DBLookupComboBox4.Text<>'' then begin
  DERNEK_LISTE_DB.SQL.Add(' and ADRES_ILCE_ADI='+QuotedStr(DBLookupComboBox4.Text)+'');
  End;

  if DBLookupComboBox5.Text<>'' then begin
  DERNEK_LISTE_DB.SQL.Add(' and ADRES_MUHTARLIK='+QuotedStr(DBLookupComboBox5.Text)+'');
  End;

  if Edit9.Text<>'' then begin
  DERNEK_LISTE_DB.SQL.Add(' and ADRES_CAD_SOK='+QuotedStr(Edit9.Text)+'');
  End;

  if Edit10.Text<>'' then begin
  DERNEK_LISTE_DB.SQL.Add(' and KAPI_NO='+QuotedStr(Edit10.Text)+'');
  End;

  if Edit11.Text<>'' then begin
  DERNEK_LISTE_DB.SQL.Add(' and DAIRE_NO='+QuotedStr(Edit11.Text)+'');
  End;

  if Edit14.Text<>'' then begin
  DERNEK_LISTE_DB.SQL.Add(' and A_NO='+QuotedStr(Edit14.Text)+'');
  End;

  if Edit13.Text<>'' then begin
  DERNEK_LISTE_DB.SQL.Add(' and A_SIRA_NO='+QuotedStr(Edit13.Text)+'');
  End;

  if Edit12.Text<>'' then begin
  DERNEK_LISTE_DB.SQL.Add(' and A_ALAN='+QuotedStr(Edit12.Text)+'');
  End;

    Memo1.Lines.add(DERNEK_LISTE_DB.sql.text);
    DERNEK_LISTE_DB.Open;

    if DERNEK_LISTE_DB.Fields.Fields[0].Value= null then
    showmessage('                    Aradığınız Kriterlere uygun Kayıt Bulunamamıştır.                    ');
    if DERNEK_LISTE_DB.Fields.Fields[0].Value> null then
    ShowMessage('            Kriterlere Uygun  # ' + inttostr(DERNEK_LISTE_DB.RecordCount)+ ' #  Kişi Bulundu            ');
    StatusBar1.Panels[1].Text:='Kriterlere Uygun  # ' + inttostr(DERNEK_LISTE_DB.RecordCount)+ ' #  Kişi Bulundu            '

erdogan_ozkaya
Üye
Mesajlar: 806
Kayıt: 03 Eki 2007 01:00

Re: Eşit Olanları Tek Kayda Düşürmek

Mesaj gönderen erdogan_ozkaya » 06 Nis 2012 12:11

ARKADAŞLAR AŞAĞIDAKİ KODUN DAHA KISA HALİ VAR MI ACABA ? (YUKARIDAKİ KODA EKLEYEBİLECEĞİM GİBİ)

Kod: Tümünü seç

	SELECT
	SECMEN_AD =(
		SELECT TOP 1 ADI FROM SECMEN SCM
		WHERE
		ARASORGU.NUFUS_ILI = SCM.NUFUS_ILI AND
		ARASORGU.NUFUS_ILCESI = SCM.NUFUS_ILCESI AND 
		ARASORGU.ADRES_IL_ADI = SCM.ADRES_IL_ADI AND
		ARASORGU.ADRES_ILCE_ADI = SCM.ADRES_ILCE_ADI AND
		ARASORGU.ADRES_MUHTARLIK = SCM.ADRES_MUHTARLIK AND
		ARASORGU.ADRES_CAD_SOK = SCM.ADRES_CAD_SOK AND
		ARASORGU.KAPI_NO = SCM.KAPI_NO AND
		ARASORGU.DAIRE_NO = SCM.DAIRE_NO ),		 
	SECMEN_SOYAD =(
		SELECT TOP 1 SOYADI FROM SECMEN SCM
		WHERE
		ARASORGU.NUFUS_ILI = SCM.NUFUS_ILI AND
		ARASORGU.NUFUS_ILCESI = SCM.NUFUS_ILCESI AND 
		ARASORGU.ADRES_IL_ADI = SCM.ADRES_IL_ADI AND
		ARASORGU.ADRES_ILCE_ADI = SCM.ADRES_ILCE_ADI AND
		ARASORGU.ADRES_MUHTARLIK = SCM.ADRES_MUHTARLIK AND
		ARASORGU.ADRES_CAD_SOK = SCM.ADRES_CAD_SOK AND
		ARASORGU.KAPI_NO = SCM.KAPI_NO AND
		ARASORGU.DAIRE_NO = SCM.DAIRE_NO ),		 


	ARASORGU.NUFUS_ILI, 
	ARASORGU.NUFUS_ILCESI, 
	ARASORGU.ADRES_IL_ADI,
	ARASORGU.ADRES_ILCE_ADI, 
	ARASORGU.ADRES_MUHTARLIK, 
	ARASORGU.ADRES_CAD_SOK, 
	ARASORGU.KAPI_NO,
	ARASORGU.DAIRE_NO
    FROM
	(SELECT DISTINCT 
	  S1.NUFUS_ILI, 
	  S1.NUFUS_ILCESI, 
	  S1.ADRES_IL_ADI,
	  S1.ADRES_ILCE_ADI, 
	  S1.ADRES_MUHTARLIK, 
	  S1.ADRES_CAD_SOK, 
	  S1.KAPI_NO,
	  S1.DAIRE_NO
	FROM SECMEN S1
	GROUP BY
	S1.NUFUS_ILI, 
	S1.NUFUS_ILCESI, 
	S1.ADRES_IL_ADI,
	S1.ADRES_ILCE_ADI, 
	S1.ADRES_MUHTARLIK, 
	S1.ADRES_CAD_SOK, 
	S1.KAPI_NO,
	S1.DAIRE_NO) ARASORGU
	WHERE ARASORGU.NUFUS_ILI IN ('ığdır')
--	WHERE NOT ARASORGU.NUFUS_ILI IN ('IĞDIR','KARS','ARDAHAN')

yusuf simsek
Üye
Mesajlar: 309
Kayıt: 09 Mar 2004 11:18
Konum: Konya
İletişim:

Re: Eşit Olanları Tek Kayda Düşürmek

Mesaj gönderen yusuf simsek » 12 Nis 2012 01:38

erdogan_ozkaya yazdı:Hocam cevabın için teşekkürler aşağıdaki gibi denedim olmadı

Kod: Tümünü seç

DERNEK_LISTE_DB.SQL.Add('select distinct (ADRES_IL_ADI'+QuotedStr(' ')+'+ADRES_ILCE_ADI'+QuotedStr(' ')+'+KAPI_NO'+QuotedStr(' ')+'+DAIRE_NO) as adres from DERNEK_LISTE');
yardımlarınız için minnettarım :) teşekkürler

bir de bu şekilde denermisin....

Kod: Tümünü seç

DERNEK_LISTE_DB.SQL.Add('select distinct (ADRES_IL_ADI + ' + QuotedStr(' ') + ' + ADRES_ILCE_ADI + ' + QuotedStr(' ') + ' + KAPI_NO + ' + QuotedStr(' ') + ' + DAIRE_NO ) as adres from DERNEK_LISTE');
Bugün bir kez daha,
Hiç Birşey Bilmediğimi Öğrendim!!!

https://extrayazilim.com

Cevapla