Insert-Select-SUM aynı sorguda kullanma

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
ertline
Üye
Mesajlar: 137
Kayıt: 23 Nis 2005 09:15
Konum: Bartın
İletişim:

Insert-Select-SUM aynı sorguda kullanma

Mesaj gönderen ertline »

S.A. arkadaşlar
Yıl sonu deviri için carilerin BORC ve ALACAK larını yeni döneme aktarmak için şu sql kodunu yazdım ve carilerin bakiyelerini cari harekete dönem devrii olarak aktarmayı başardım.Fakat alt toplamı aldıramıyorum.

Kod: Tümünü seç

cari_hesap_ekle.Close;
cari_hesap_ekle.SQL.Clear;
cari_hesap_ekle.SQL.Add('insert into cari_hesap(DNO,TARIH,ACIKLAMA,ODEMETIPI,BORC,ALACAK)');
cari_hesap_ekle.SQL.Add('Select KNO,'+QuotedStr(datetostr(date))+','+Quotedstr('Dönem Deviri')+','+ Quotedstr('Nakit')+ ',BORC_TOP,ALACAK_TOP from CARI_KAYIT');
cari_hesap_ekle.ExecSQL;
burada cari_hesap tablosuna eklediğim hareketi SUM ile nasıl tolayabilirim ama tüm carileri için aynı anda olacak.

Hayırlı çalışmalar...
"Bilginin Doruğuna Hep Birlikte..."
Kullanıcı avatarı
yastik
Üye
Mesajlar: 71
Kayıt: 01 Ağu 2003 05:26
İletişim:

Mesaj gönderen yastik »

Hemen altında "SUM" fonksiyonunu kullanarak
ALi ÇELİK
ertline
Üye
Mesajlar: 137
Kayıt: 23 Nis 2005 09:15
Konum: Bartın
İletişim:

Mesaj gönderen ertline »

Aşağıdaki kodda hata vermiyor ama toplam almayıp cari_kayit tablosundaki borc_top ve Alacak_top alanlarının içini Null Yapıyor

Kod: Tümünü seç

cari_hesap_ekle1.Close;
cari_hesap_ekle1.SQL.Clear;
cari_hesap_ekle1.SQL.Add('update cari_kayit set borc_top=(Select SUM(BORC) from CARI_HESAP where dno=:kno),alacak_top=(Select SUM(ALACAK) from CARI_HESAP where dno=:kno)');
cari_hesap_ekle1.ExecSQL;
yardımcı olursanız sevinirim..

Hayırlı çalışmalar...
En son ertline tarafından 05 Nis 2006 06:47 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
"Bilginin Doruğuna Hep Birlikte..."
Kullanıcı avatarı
bobasturk
Kıdemli Üye
Mesajlar: 1387
Kayıt: 20 May 2004 08:39
Konum: Düzce

Mesaj gönderen bobasturk »

merhaba,

mantık olarak cevap yazmak istedim, ayrıca denemedim.

aynı kod bloğu içinde önce update veya insert işlemini yaptırdıktan sonra query yi clos ederek sum komutlarını yazmanız çözüm olurmu acaba veya aynı trans a bağlı iki query kullanarak

kolay gelsin
Şefkat-u Merhamette Güneş Gibi Ol.
Başkalarının Kusurunu Örtmekte Gece Gibi Ol.
Sehavet-u Cömertlikte Akarsu Gibi Ol.
Hiddet-u Asabiyette Ölü Gibi Ol.
Tevazu-u Mahviyette Toprak Gibi Ol.
Ya Olduğun Gibi Görün Ya Göründüğün Gibi Ol.

Resim
ertline
Üye
Mesajlar: 137
Kayıt: 23 Nis 2005 09:15
Konum: Bartın
İletişim:

Mesaj gönderen ertline »

Select sorgusundan;

Kod: Tümünü seç

where dno=:kno
Çıkarınca toplam aldı ama doğal olarak tüm cari_hesap tablosunun borc ve alacaklarını topladı
where i nasıl kullanmalıyım burda acaba?
"Bilginin Doruğuna Hep Birlikte..."
Kullanıcı avatarı
bobasturk
Kıdemli Üye
Mesajlar: 1387
Kayıt: 20 May 2004 08:39
Konum: Düzce

Mesaj gönderen bobasturk »

merhaba,

çıkarınca tamamında işlemi yapıyorsa sanırım parametre vermede hata oluyor. parametre vererek neleri süzerek işlem yapması gerektiğini bildirmen gerekli diye düşünüyorum.

kolay gelsin
Şefkat-u Merhamette Güneş Gibi Ol.
Başkalarının Kusurunu Örtmekte Gece Gibi Ol.
Sehavet-u Cömertlikte Akarsu Gibi Ol.
Hiddet-u Asabiyette Ölü Gibi Ol.
Tevazu-u Mahviyette Toprak Gibi Ol.
Ya Olduğun Gibi Görün Ya Göründüğün Gibi Ol.

Resim
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

Kod: Tümünü seç

//...
cari_hesap_ekle1.Close;
cari_hesap_ekle1.SQL.Clear;
cari_hesap_ekle1.SQL.Add('update cari_kayit ck set ck.borc_top=(Select SUM(BORC) from CARI_HESAP where dno=:kno and cari_hesap_no = ck.cari_hesap_no), alacak_top=(Select SUM(ALACAK) from CARI_HESAP where dno=:kno and cari_hesap_no = ck.cari_hesap_no)');
cari_hesap_ekle1.ExecSQL; 
//...
Her iki tabloda da cari_hesap_no diye eşsiz/unique bir anahtar/key alanı olduğunu varsaydım. Başka bir isim de olabilir, her ne ise UPDATE tablosuna lakap/alias atayıp and ile benzer şekilde eklemelisin :idea:
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Cevapla