distinct ile sum ın birlikte kullanılması

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Kullanıcı avatarı
huseyinert
Üye
Mesajlar: 233
Kayıt: 19 Nis 2005 06:49
Konum: Bartın

distinct ile sum ın birlikte kullanılması

Mesaj gönderen huseyinert »

s.a arkadaşlar
distinct ile count ı şöyle çalıştırdım

Kod: Tümünü seç

cek_senet_say.Close;
cek_senet_say.UnPrepare;
cek_senet_say.SQL.Clear;
cek_senet_say.SQL.Add('select count(distinct cek_senet_no) as toplam from cek_senet');
cek_senet_say.Prepare;
cek_senet_say.Open;
bu problemsiz çalışıyor aynı şekilde şu sorgumuda yapmak istiyorum ama olmuyor

Kod: Tümünü seç

cek_senet_sum.Close;
cek_senet_sum.UnPrepare;
cek_senet_sum.SQL.Clear;
cek_senet_sum.SQL.Add('select sum(tutar) from cek_senet where tur='+#39+'Müşteri Çeki'+#39+'');
cek_senet_sum.Prepare;
cek_senet_sum.Open;
burda sum ın önüne distinct cek_senet_no koydum ama hata veriyor
burda cek_senet_no alanına göre distict yapılacak ve tutar alanı sum olacak yardımlarınızı bekliyorum

kolay gelsin[/quote]
"Kula bela gelmez Hak yazmayınca,Hak bela yazmaz kul azmayınca..." MEVLANA
Kullanıcı avatarı
ofenX
Üye
Mesajlar: 397
Kayıt: 09 Nis 2005 10:24
Konum: Diyarbakır
İletişim:

Mesaj gönderen ofenX »

Merhaba,
Normalde verdiğiniz komut için size sonucu vermesi lazım. Ama eğer her tür için toplam versin diyorsanız neden group by tur kullanmamışsınız.
Ya da ben tam anlayamadım.

Kolay gelsin.
http://www.aysbergbilgisayar.com
Logo Go özel eğitim, web tasarım, teknik servis
Kullanıcı avatarı
huseyinert
Üye
Mesajlar: 233
Kayıt: 19 Nis 2005 06:49
Konum: Bartın

Mesaj gönderen huseyinert »

hocam tur için istiyorum ama burda cek_senet_no alanına göre distinct yapmam lazım bu nasıl olacak
"Kula bela gelmez Hak yazmayınca,Hak bela yazmaz kul azmayınca..." MEVLANA
poshet303
Üye
Mesajlar: 235
Kayıt: 26 Eki 2005 01:15

Mesaj gönderen poshet303 »

Group by kullanmadan bir grup fonksiyonu yanında alanadı kullabilir mi?

Yapmaya çalıştığınız şey için distinct e ihtiyaç yok.
Group by cek_senet_no dediğinizde zaten cek_senet_no nun aldığı her bir değer için o değere ait tekrarların TUTAR toplamları hesaplanacaktır.


Yada ben yanlış anladım.
Kullanıcı avatarı
huseyinert
Üye
Mesajlar: 233
Kayıt: 19 Nis 2005 06:49
Konum: Bartın

Mesaj gönderen huseyinert »

hocam nasıl olacak benim yazdığım kodlar üzeinde örnek olarak gösterebilirmisiniz...
"Kula bela gelmez Hak yazmayınca,Hak bela yazmaz kul azmayınca..." MEVLANA
Kullanıcı avatarı
ofenX
Üye
Mesajlar: 397
Kayıt: 09 Nis 2005 10:24
Konum: Diyarbakır
İletişim:

Mesaj gönderen ofenX »

Merhaba,
İşinizle ilgili bir kaç örnek verebilirmisiniz. Şu alana şunu giriyorum. şu alana şunu giriyorum.
Sonuçta da şu şu değerleri görmek istiyorum. gibi bir örnek verirseniz. daha yardımcı olabiliriz.

İyi çalışmalar.
http://www.aysbergbilgisayar.com
Logo Go özel eğitim, web tasarım, teknik servis
Kullanıcı avatarı
nitro
Üye
Mesajlar: 1112
Kayıt: 23 Ağu 2004 01:18
Konum: Çanakkale
İletişim:

Mesaj gönderen nitro »

hocam ufak bir kandırmaca gerekiyor. sqli kandıracaz.

Kod: Tümünü seç

cek_senet_sum.Close;
cek_senet_sum.UnPrepare;
cek_senet_sum.SQL.Clear;
cek_senet_sum.SQL.Add('select max(cek_senet_no),sum(tutar) from cek_senet where tur='+#39+'Müşteri Çeki'+#39+'');
cek_senet_sum.SQL.Add('group by cek_senet_no')
cek_senet_sum.Prepare;
cek_senet_sum.Open;
olay şu. ceksenetnoya göre gruplandırma yaınca zaten distinct ile aynı işi yapmış oluyoruz. max ise aynı olan kayıtlardan en büyüğünü (yani yine aynısını) seçiyor. kolay gelsin.
Kullanıcı avatarı
huseyinert
Üye
Mesajlar: 233
Kayıt: 19 Nis 2005 06:49
Konum: Bartın

Mesaj gönderen huseyinert »

portföydeki bir çekin cirolanması durumunda aynı çek numarasından iki tane kayıt oluşuyor yani iki ayrı carinin ceksenet hesabına gidiyor çift kayıt oluyor burda rapor alırken
şöyle alıyorum

Kod: Tümünü seç

cek_senet_rapor.Close;
cek_senet_rapor.UnPrepare;
cek_senet_rapor.SQL.Clear;
cek_senet_rapor.SQL.Add('select distinct cek_senet_no,islem_turu,tur,vade_tar,durumu,tutar,gd_cari_kodu,gd_unvan,gd_adi,gd_soyadi,gl_cari_kodu,gl_unvan,gl_adi,gl_soyadi,banka,hesap_no from cek_senet');
cek_senet_rapor.Prepare;
cek_senet_rapor.Open;
bu şu anda çalışıyor
sonrasında
kayıt sayısı için

Kod: Tümünü seç

cek_senet_say.Close;
cek_senet_say.UnPrepare;
cek_senet_say.SQL.Clear;
cek_senet_say.SQL.Add('select count(distinct cek_senet_no) as toplam from cek_senet');
cek_senet_say.Prepare;
cek_senet_say.Open;
kullanıyorum
sonra da müşteri çekini ayrı toplam kendi çekimi artı toplam olarak alt toplamlar almak istiyorum
burda yine çift kayıt olduğu için teke düşürülüp
öyle toplam alınması gerekiyor
olay bundan ibaret
yardımlarınızıbekliyorum
"Kula bela gelmez Hak yazmayınca,Hak bela yazmaz kul azmayınca..." MEVLANA
Kullanıcı avatarı
nitro
Üye
Mesajlar: 1112
Kayıt: 23 Ağu 2004 01:18
Konum: Çanakkale
İletişim:

Mesaj gönderen nitro »

sayın @hüseyinert ben de aynı mantıkla çek senet kaydı tutuyorum. size tavsiyem yukarda yazığım kodu dikkatli incelemenizdir. çünkü ben de aynı sıkıntı ile karşılaştım ve böyle çözdüm.
saygılarımla
Kullanıcı avatarı
huseyinert
Üye
Mesajlar: 233
Kayıt: 19 Nis 2005 06:49
Konum: Bartın

Mesaj gönderen huseyinert »

nikrokonat hocam dediğinizi yaptım ama öncelikle şunu söyleyim cek_senet_no alanım varchar bir alan ama max çalışmaz diye dşündüm ama çalıştı fakat doğru çalışmadı ne yazııki te cek_senet_no yu grupluyor ve onun tutarını getiriyor ama ben müşteri çek leri içindeki cek_senet_no larından bir den fazla olanı teke düşürüp tek olan tüm cek_senet_no lu kayıtların toplamını istiyorum
"Kula bela gelmez Hak yazmayınca,Hak bela yazmaz kul azmayınca..." MEVLANA
aLonE CoDeR
Kıdemli Üye
Mesajlar: 1223
Kayıt: 26 Nis 2005 04:08

Mesaj gönderen aLonE CoDeR »

gruplamayı id için yaparsan istediğin işlem gerçekleşir.Distinct'in kullanım amacı bu tarz işlemler değil zaten.

Kolay gele..
Kullanıcı avatarı
huseyinert
Üye
Mesajlar: 233
Kayıt: 19 Nis 2005 06:49
Konum: Bartın

Mesaj gönderen huseyinert »

id derken nasıl id ye göre gruplama yapacağım hocam
"Kula bela gelmez Hak yazmayınca,Hak bela yazmaz kul azmayınca..." MEVLANA
Kullanıcı avatarı
nitro
Üye
Mesajlar: 1112
Kayıt: 23 Ağu 2004 01:18
Konum: Çanakkale
İletişim:

Mesaj gönderen nitro »

verilerimiz şöyle olsun

cekno tutar
  • 123---- 100.00
    312---- 350.00
    123---- 100.00
    312---- 350.00
    455---- 900.00

Kod: Tümünü seç

cek_senet_sum.Close;
cek_senet_sum.UnPrepare;
cek_senet_sum.SQL.Clear;
cek_senet_sum.SQL.Add('select max(cek_senet_no),max(tutar) from cek_senet where tur='+#39+'Müşteri Çeki'+#39+'');
cek_senet_sum.SQL.Add('group by cek_senet_no')
cek_senet_sum.Prepare;
cek_senet_sum.Open;
kodu bize şu sonucu verecektir.
max-cekno max-tutar
  • 123---- 100.00
    312---- 350.00
    455---- 900.00
istediğin bu değil mi?
not: ilk yazdığım kodda sum(tutar) yerine max (tutar) yazmak gerekli.
poshet303
Üye
Mesajlar: 235
Kayıt: 26 Eki 2005 01:15

Mesaj gönderen poshet303 »

'select cek_senet_no , sum(tutar) from cek_senet where tur='+#39+'Müşteri Çeki'+#39+''
group by cek_senet_no'
Bu SQL script i senin istediğini tam olarak yapması lazım. Hala sorun var ise; Nasıl bir veri yapın var nasıl bir çıktı istiyorsun onu yaz.

Max fonksiyonu VarChar içinde çalışır ama büyük string i getirir.(Büyük string ne mi? Karekterlerin ASCII kodları göz önüne alındığında büyük olan.)
aLonE CoDeR
Kıdemli Üye
Mesajlar: 1223
Kayıt: 26 Nis 2005 04:08

Mesaj gönderen aLonE CoDeR »

PK alanın yok mu?Ek olarak aynı şeyi tür için de yapabilirsin ama where şartı da biraz kelli felli olmalı, yoksa her benzeyen kaydı alıp karşına diker...
Cevapla