SQL de bakiye toplama

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
comeng07
Üye
Mesajlar: 22
Kayıt: 26 May 2018 11:35
Konum: Antalya

SQL de bakiye toplama

Mesaj gönderen comeng07 »

Sql tabanlı yaptığım bir programda aşağıdaki kod ile bir tablo oluşturdum. Bu tabloya gelen verileri fast reportta rapor alıyorum ama yapmak istediğim borç ve alacakların toplamlarını ayrı ayrı almak istiyorum. yani eksi bakiler ile artı bakiyeleri borç toplamı ve alacak toplamı diye fast reportta göstermek istiyorum.

select
ISNULL((select sum (BORÇ-ALACAK) from URUN where CARİKODU=URUN.KODU),0) BAKIYE,
(case when ISNULL((select sum (BORÇ-ALACAK) from URUN where CARİKODU=URUN.KODU),0)>0 then '(Borç)'
when ISNULL((select sum (BORÇ-ALACAK) from URUN where CARİKODU=URUN.KODU),0)<0 then '(Alacak)'
Else '(-)' end ) BA

from CARI

ekran görüntüsü ektedir oradaki ( - ) bakiyeleri ayrı ( + ) bakiyeleri ayrı toplamak istiyorum. yardımcı olursanız sevinirim. bu arada projemi delphide yapıyorum.
Dosya ekleri
ekran grntüsü.jpg
ekran grntüsü.jpg (3.56 KiB) 3077 kere görüntülendi
nurett.in
Üye
Mesajlar: 1
Kayıt: 30 Tem 2018 02:34

Re: SQL de bakiye toplama

Mesaj gönderen nurett.in »

Merhaba,

Bakiye toplamını cross apply'a aldım, kod tekrarı azaldı.

Kod: Tümünü seç

select 
  bakiye.Toplam
  , case 
    when bakiye.Toplam > 0 then '(Borç)'
    when bakiye.Toplam <= 0 then '(Alacak)'
    end Aciklama
cross apply (
  select (select sum (BORÇ-ALACAK) from URUN where CARİKODU=URUN.KODU) Toplam
) bakiye
from CARI
Bunu view gibi birşeye koyuver. Mesela vw_bakiye. İkinci aşamada da sorgudan sorgu çekersen olacak.

Kod: Tümünü seç

select
  sum(case when bakiye.Toplam < 0 then bakiye.Toplam else 0 end) NegatifToplam
  , sum(case when bakiye.Toplam >= 0 then bakiye.Toplam else 0 end) PozitifToplam
from vw_bakiye
comeng07
Üye
Mesajlar: 22
Kayıt: 26 May 2018 11:35
Konum: Antalya

Re: SQL de bakiye toplama

Mesaj gönderen comeng07 »

teşekkürler
Cevapla