SQL' de Değişimde Toplam Almak

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
ozcank
Üye
Mesajlar: 929
Kayıt: 28 Nis 2005 05:29

SQL' de Değişimde Toplam Almak

Mesaj gönderen ozcank »

Arkadaşlar Merhaba; SQL' de yazmış olduğum kod da şunu yapmak istiyorum;

Mesela BASLIK olarak FATURA
BASLIK olarak KASA şeklinde UNION ALL Kullanarak rapor aldım fakat dip kısım da ,

FATURA da GENELTOPLAM olan sütünü dip de toplamak
KASA da TUTAR olan sütünü dip de toplamak

Bu konuda bana yardımcı olabilecek misiniz?

KumulatifToplam Yanlış toplam yapıyor.

BASLIK DURUMU CARI_KODU ACIKLAMA GENELTOPLAM
FATURA S.FATURA(ACIK) 0001030 NULL 921.00000000
FATURA S.FATURA(ACIK) 0001047 NULL 1845.55000000
FATURA S.FATURA(ACIK) 0001152 NULL 671.44000000
FATURA S.FATURA(ACIK) 0001181 NULL 135.14000000

TOPLAM 3.573,39
KASA GELIR R106 (Nakit) 750.00000000
KASA GELIR R176 (Nakit) 250.00000000
KASA GELIR 000913 (K.Karti) 5000.00000000
KASA GELIR R147 (K.Karti) 250.00000000
TOPLAM 6.250

Kod: Tümünü seç

SELECT 'FATURA' AS BASLIK,
                          (CASE WHEN FI.FTIRSIP = '1' AND FI.TIPI = '1' THEN 'S.FATURA(KAPALI)'
                                 WHEN FI.FTIRSIP = '1' AND FI.TIPI = '2' THEN 'S.FATURA(ACIK)'
                                 ELSE '0' END) AS DURUMU,
FI.CARI_KODU,
--CONVERT(VARCHAR(15),FI.TARIH,104) AS TARIH,
(CONVERT(VARCHAR(50),FI.ACIKLAMA)) AS ACIKLAMA,
FI.GENELTOPLAM,
        (    SELECT SUM(T1.GENELTOPLAM) FROM TBLFATUIRS T1
            WHERE t1.tarih <= FI.tarih
        ) AS KumulatifToplam
FROM TBLFATUIRS FI
GROUP BY
FI.FTIRSIP,
FI.CARI_KODU,
--CONVERT(VARCHAR(15),FI.TARIH,104),
CONVERT(VARCHAR(50),FI.ACIKLAMA),
FI.GENELTOPLAM,
FI.TIPI,
FI.TARIH
UNION ALL ------  KASA İŞLEMLERİ  --------------
SELECT 'KASA' AS BASLIK,
                       (CASE WHEN KS.IO='G' THEN 'GELIR'  
                             WHEN KS.IO='C' THEN 'GIDER' ELSE '0' END) AS DURUMU,
CONVERT(VARCHAR(15),KS.KOD) AS CARI_KODU,
--CONVERT(VARCHAR(15),KS.TARIH,104) AS TARIH,
(CONVERT(VARCHAR(50),KS.ACIKLAMA)) AS ACIKLAMA,
KS.TUTAR,
        (    SELECT SUM(T1.TUTAR) FROM TBLKASA T1
            WHERE t1.tarih <= KS.tarih
        ) AS TOPLAM
FROM TBLKASA KS
WHERE KS.TARIH BETWEEN '2019-01-01' AND '2019-01-10'
GROUP BY
CONVERT(VARCHAR(50),KS.ACIKLAMA),
--CONVERT(VARCHAR(15),KS.TARIH,104),
CONVERT(VARCHAR(15),KS.KOD),
KS.IO,
KS.TUTAR,
KS.TARIH
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2359
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Re: SQL' de Değişimde Toplam Almak

Mesaj gönderen freeman35 »

diğeri için 0.0 alan ekle

Kod: Tümünü seç

) AS KumulatifToplam
, 0.0 /* Kasa toplam*/
FROM TBLFATUIRS FI
....
(CONVERT(VARCHAR(50),FI.ACIKLAMA)) AS ACIKLAMA,
,0.0, /*Fatura toplam*/
FI.GENELTOPLAM,
        (    SELECT SUM(T1.GENELTOPLAM) FROM TBLFATUIRS T1
            WHERE t1.tarih <= FI.tarih
        ) AS KumulatifToplam
FROM TBLFATUIRS FI
ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5

Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
ozcank
Üye
Mesajlar: 929
Kayıt: 28 Nis 2005 05:29

Re: SQL' de Değişimde Toplam Almak

Mesaj gönderen ozcank »

Merhaba, Dediğiniz gibi yaptım ama çok farklı rakamlar ortaya çıktı.
ertank
Kıdemli Üye
Mesajlar: 1665
Kayıt: 12 Eyl 2015 12:45

Re: SQL' de Değişimde Toplam Almak

Mesaj gönderen ertank »

ozcank yazdı: 10 May 2024 03:38 FATURA da GENELTOPLAM olan sütünü dip de toplamak
KASA da TUTAR olan sütünü dip de toplamak
Dip de toplamak dediğiniz tek satır olarak en altta gözükmesi ise bunu yine union ile yapabilirsiniz.

KümülatifToplam değerini haricen bir SQL ile toplam alıp kontrol ediyor musunuz? Filtrelemede hatanız olabilir mi? İrsaliyesi kesilip faturası kesilmemiş kayıtlar olabilir mi? Faturalanmış ama kasa kaydı yapılmamış faturalar olabilir mi? Fatura ile ilişkisi olmayan kasa kayıtları olabilir mi?

Elimizde veri olmadığı için "hata şudur" şeklinde yardımcı olmak çok mümkün değil. Ancak verdiğiniz örnek doğru ve sadece 4 tane fatura ve 4 tane kasa listeleniyorsa tek tek elle kontrol ederek sorunu tespit edebilirsiniz. Eğer Excel kullanıyorsanız ham verileri excel içine alıp orada inceleyebilirsiniz.
ozcank
Üye
Mesajlar: 929
Kayıt: 28 Nis 2005 05:29

Re: SQL' de Değişimde Toplam Almak

Mesaj gönderen ozcank »

Teşekkür ederim.
ben şu şekilde bircümle ile tam istediğim oldu fakat kendi cümleme ekleyemedim.

Tam İstediğim sonuç

Kod: Tümünü seç

SELECT 
    COALESCE(FI.CARI_KODU,'GenelToplam') AS CARI_KODU,
    SUM(FI.GENELTOPLAM) AS GENEL_TOPLAM
FROM
    TBLFATUIRS FI
GROUP BY ROLLUP (FI.CARI_KODU)
Bu cümleye ekleyemedim.

Kod: Tümünü seç

SELECT 'FATURA' AS BASLIK,  
                           (CASE WHEN FI.FTIRSIP = '1' AND FI.TIPI = '1' THEN 'S.FATURA(KAPALI)'
						         WHEN FI.FTIRSIP = '1' AND FI.TIPI = '2' THEN 'S.FATURA(ACIK)'
								 ELSE '0' END) AS DURUMU,
--FI.CARI_KODU,
SUM ( CAST ( FI.GENELTOPLAM AS DECIMAL ( 18, 2 ) ) ),
CONVERT(VARCHAR(15),FI.TARIH,104) AS TARIH,
(CONVERT(VARCHAR(50),FI.ACIKLAMA)) AS ACIKLAMA,
--FI.GENELTOPLAM,
    COALESCE(FI.CARI_KODU,'GenelToplam') AS CariKodu,
    SUM(FI.GENELTOPLAM) AS GenelToplam
FROM TBLFATUIRS FI
GROUP BY 
FI.FTIRSIP,
ROLLUP(FI.CARI_KODU),
CONVERT(VARCHAR(15),FI.TARIH,104),
CONVERT(VARCHAR(50),FI.ACIKLAMA),
--FI.GENELTOPLAM,
FI.TIPI,
FI.TARIH


Sonuç Bu şekilde;
FATURA S.FATURA(ACIK) 101.02 03.06.2019 NULL 45 101.02000000
FATURA S.FATURA(ACIK) 98.78 03.06.2019 NULL 468 98.78000000
FATURA S.FATURA(ACIK) 3128.18 03.06.2019 NULL GenelToplam 3128.18000000
FATURA S.FATURA(ACIK) 5.67 03.06.2020 NULL 00017 5.67000000
FATURA S.FATURA(ACIK) 5.67 03.06.2020 NULL 000712 5.67000000
FATURA S.FATURA(ACIK) 11.34 03.06.2020 NULL GenelToplam 11.34000000
FATURA S.FATURA(ACIK) 893.02 03.07.2019 NULL 0001030 893.02000000
FATURA S.FATURA(ACIK) 771.70 03.07.2019 NULL 0001034 771.70000000
FATURA S.FATURA(ACIK) 980.02 03.07.2019 NULL 000109 980.02000000
FATURA S.FATURA(ACIK) 711.09 03.07.2019 NULL 0001320 711.09000000
ertank
Kıdemli Üye
Mesajlar: 1665
Kayıt: 12 Eyl 2015 12:45

Re: SQL' de Değişimde Toplam Almak

Mesaj gönderen ertank »

ozcank yazdı: 11 May 2024 11:44 Teşekkür ederim.
ben şu şekilde bircümle ile tam istediğim oldu fakat kendi cümleme ekleyemedim.

Tam İstediğim sonuç

Kod: Tümünü seç

SELECT 
    COALESCE(FI.CARI_KODU,'GenelToplam') AS CARI_KODU,
    SUM(FI.GENELTOPLAM) AS GENEL_TOPLAM
FROM
    TBLFATUIRS FI
GROUP BY ROLLUP (FI.CARI_KODU)
Burada hiçbir filtreleme yok. Cari'nin genel toplamı bu sorgu. Benim anladığım fatura genel toplamı almak istiyorsunuz her satıra. Yapmak istediğiniz nedir anlayamadım.
ozcank
Üye
Mesajlar: 929
Kayıt: 28 Nis 2005 05:29

Re: SQL' de Değişimde Toplam Almak

Mesaj gönderen ozcank »

Tam istediğim şu;

BASLIK da yazan FATURA , KASA gruplarını dip toplam alıp en sonun da genel toplam aldırtmak.

Kod: Tümünü seç

SELECT 'FATURA' AS BASLIK,  
                           (CASE WHEN FI.FTIRSIP = '1' AND FI.TIPI = '1' THEN 'S.FATURA(KAPALI)'
						         WHEN FI.FTIRSIP = '1' AND FI.TIPI = '2' THEN 'S.FATURA(ACIK)'
								 ELSE '0' END) AS DURUMU,
--FI.CARI_KODU,
SUM ( CAST ( FI.GENELTOPLAM AS DECIMAL ( 18, 2 ) ) ),
CONVERT(VARCHAR(15),FI.TARIH,104) AS TARIH,
(CONVERT(VARCHAR(50),FI.ACIKLAMA)) AS ACIKLAMA,
--FI.GENELTOPLAM,
    COALESCE(FI.CARI_KODU,'GenelToplam') AS CariKodu,
    SUM(FI.GENELTOPLAM) AS GenelToplam
FROM TBLFATUIRS FI
GROUP BY 
FI.FTIRSIP,
ROLLUP(FI.CARI_KODU),
CONVERT(VARCHAR(15),FI.TARIH,104),
CONVERT(VARCHAR(50),FI.ACIKLAMA),
--FI.GENELTOPLAM,
FI.TIPI,
FI.TARIH

UNION ALL ------  KASA İŞLEMLERİ  --------------
SELECT 'KASA' AS BASLIK,
                        (CASE WHEN KS.IO='G' THEN 'GELIR'  
                              WHEN KS.IO='C' THEN 'GIDER' ELSE '0' END) AS DURUMU,
CONVERT(VARCHAR(15),KS.KOD) AS CARI_KODU,
--CONVERT(VARCHAR(15),KS.TARIH,104) AS TARIH,
(CONVERT(VARCHAR(50),KS.ACIKLAMA)) AS ACIKLAMA,
KS.TUTAR,
		(	SELECT SUM(T1.TUTAR) FROM TBLKASA T1
			WHERE t1.tarih <= KS.tarih
         ) AS TOPLAM
FROM TBLKASA KS
WHERE KS.TARIH BETWEEN '2019-01-01' AND '2019-01-10' 
GROUP BY 
CONVERT(VARCHAR(50),KS.ACIKLAMA),
--CONVERT(VARCHAR(15),KS.TARIH,104),
CONVERT(VARCHAR(15),KS.KOD),
KS.IO,
KS.TUTAR,
KS.TARIH
ertank
Kıdemli Üye
Mesajlar: 1665
Kayıt: 12 Eyl 2015 12:45

Re: SQL' de Değişimde Toplam Almak

Mesaj gönderen ertank »

ozcank yazdı: 11 May 2024 03:14 Tam istediğim şu;

BASLIK da yazan FATURA , KASA gruplarını dip toplam alıp en sonun da genel toplam aldırtmak.
"En sonuna" ile kastınız raporun en son satırı ise Union ile yapabileceğiniz birşey. Eğer sağ tarafa en son kolon olarak ise subselect kullanmanız gerekecek. Bu durumda da ilgili sartırı subselect içinde where kullanarak filtrelemelisiniz.
Cevapla