filtrelenmiş datada sum komutu kullanmak

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
ZeynelAbidin
Üye
Mesajlar: 69
Kayıt: 02 Oca 2009 09:03

filtrelenmiş datada sum komutu kullanmak

Mesaj gönderen ZeynelAbidin »

arkadaşlar querym aşağıdaki gibidir. ben burada 3 db ye bakıp ekrana bir veri getiriyorum ve daha sonra bunları ekrandaki editlere göre değişik şekilde filtreleme yapıyorum.benim burda sormak istediğim bu filtrelenmiş alanın sonucunu sum komutu ile nasıl toplatabilirim.aşağıdaki kodu oludğu gibi uazarsam bana her satırın tutar değerini veriyor.yok SUM(TUTAR) yerine(select sum(tutar)from cek) dersem ekrana cekteki bütün verileri topluyor ama ben ekrana gelen verilerin toplamını almak istiyorum. yardımlarınızı bekliyorum.teşekkür ederim.

Kod: Tümünü seç

data.cek_table.SQL.Clear;
   data.cek_table.SQL.Add('select bordro.carikod,cari.unvan,bordro.tarih,cek.sira,cek.portno,cek.cekno,cek.banka,');
   data.cek_table.SQL.Add('cek.sube,cek.hesap,cek.vade,cek.borclu,cek.tutar,cek.keside');
   data.cek_table.SQL.Add('cek.keside_vd,cek.keside_vno,cek.keside_il,cek.keside_ilce');
   data.cek_table.SQL.Add('cek.keside_tel,cek.keside_ceptel,cek.keside_adres,SUM(TUTAR) from bordro ');
   data.cek_table.SQL.Add('right outer join cek_bordro on bordro.bordrono=cek_bordro.bordrono');
   data.cek_table.sql.Add('right outer join cek on cek_bordro.portno=cek.portno');
   data.cek_table.sql.Add('left outer join cari on bordro.carikod=cari.kodu');
   data.cek_table.sql.Add('where bordro.btur="Portföye Çek Giriş Bordrosu"');
   data.cek_table.SQL.Add('and bordro.tarih between "'+datetostr(btar1.Date)+'" and "'+datetostr(btar2.Date)+'"');
   data.cek_table.SQL.Add('and cek.vade between "'+datetostr(vtar1.Date)+'"and "'+datetostr(vtar2.Date)+'"');
   if kod1.Text<>'' then
   begin
      if kod2.Text<>'' then
      data.cek_table.SQL.Add('and bordro.carikod between '+quotedstr(kod1.Text)+' and '+quotedstr(kod2.Text))
      else data.cek_table.SQL.Add('and bordro.carikod>='+quotedstr(kod1.Text));
   end
   else if kod2.Text<>'' then
   data.cek_table.sql.Add('and bordro.carikod<='+quotedstr(kod2.Text));
   if pno1.Text<>'' then
   begin
      if pno2.Text<>'' then
      data.cek_table.sql.Add('and cek.portno between '+quotedstr(pno1.Text)+' and '+quotedstr(pno2.Text))
      else data.cek_table.SQL.Add('and cek.portno>='+quotedstr(pno1.Text));
   end
   else if pno2.Text<>'' then
   data.cek_table.SQL.Add('and cek.portno<='+quotedstr(pno2.Text));
   if bno1.Text<>'' then
   begin
      if bno2.Text<>'' then
      data.cek_table.sql.Add('and bordro.bordrono between '+quotedstr(bno1.Text)+' and '+quotedstr(bno2.Text))
      else data.cek_table.SQL.Add('and bordro.bordrono>='+quotedstr(bno1.Text));
   end
   else if bno2.Text<>'' then
   data.cek_table.SQL.Add('and bordro.bordrono<='+quotedstr(bno2.Text));
   if borclu.Text<>'' then
   data.cek_table.SQL.Add('and cek.borclu='+quotedstr(borclu.Text));
   data.cek_table.SQL.Add('group by bordro.carikod,cari.unvan,bordro.tarih,cek.sira,cek.portno,cek.cekno,cek.banka,');
   data.cek_table.SQL.Add('cek.sube,cek.hesap,cek.vade,cek.borclu,cek.tutar,cek.keside,');
   data.cek_table.SQL.Add('cek.keside_vd,cek.keside_vno,cek.keside_il,cek.keside_ilce,');
   data.cek_table.SQL.Add('cek.keside_tel,cek.keside_ceptel,cek.keside_adres');

   data.cek_table.Open;

recepuncu
Üye
Mesajlar: 66
Kayıt: 04 Nis 2006 08:22
Konum: Çorum

Re: filtrelenmiş datada sum komutu kullanmak

Mesaj gönderen recepuncu »

slm,
1. ikinci bir query ile ekrana gelen kayıtları gruplayabilseydin o dediğini yapabilirdin, nasıl gruplarım dersen; tabloya Integer bir sütun daha atıp tüm kayıtlara "1" değerini ver, sonra aynı sorguyu her iki query için çalıştır ama ikincide GROUP BY EKLEDIGIN_SUTUN; u kullanmayı unutma..biraz karışık gibi ama basit.

2. sorgu çalıştıktan sonra tabi çok fazla kayıt yoksa query1.first; while not query1.eof do begin toplam := toplam + query1tutar.value; end; gibi bişeyde deneyebilirsin.
"Şu deredeki su,kaç kere değişti,yıldızların akisleri hep yerinde."
ZeynelAbidin
Üye
Mesajlar: 69
Kayıt: 02 Oca 2009 09:03

Re: filtrelenmiş datada sum komutu kullanmak

Mesaj gönderen ZeynelAbidin »

ilgin için teşekkür ederim.ama ben zaten bu olayı döngü kurmadan yapmak istiyorum.integer sütünu ekledikten sonra onu nasıl sql cümlesiyle hep 1 yapabilirim.diğer şekille eğere döngü kuracaksam zaten ben döngü ile toplamı alabilirim.bu işi döngüsüz kurmam lazım.zaten bde ile yaptığımdan dolayı döngü bir kere kurdum ikinci bir döngü herelde facia olurdu.
recepuncu
Üye
Mesajlar: 66
Kayıt: 04 Nis 2006 08:22
Konum: Çorum

Re: filtrelenmiş datada sum komutu kullanmak

Mesaj gönderen recepuncu »

o halde 2. verdiğim seçeneğe takılı kalma, Group By - Having biraz araştır, daha hızlı çalışacağı kesin.. bu arada tabloya sütunu açtıktan sonra bir döngü ile bir defalığına hepsine 1 diye yazdırabilirsin sana kalmış, ama bir defa yazcan her sorguda değil yane

http://www.w3schools.com/sql/sql_groupby.asp
"Şu deredeki su,kaç kere değişti,yıldızların akisleri hep yerinde."
Cevapla