Herkese Hayırlı çalışmalar dilerim. Arkadaşlar aşağıdaki kodda görmüş olduğunuz gibi 2 adet toplam sütunum var. Görüldüğü gibide bu kod verilen tarih arasında farklı kriterler doğrultusunda bana o kayıtların yani kişilerin toplamda yapmış olduğu ödemeyi ve ödenmesi gerekeni veriyor ancak buna ilave olarak 2 sütuna daha ihtiyacım var oda hiç birşey değişmeden sadece verilen ilk tarih kriterinden önceki tüm tarihler için ödenmiş ve ödenmesi gerekenlerin toplamı yani devir mantığı misali
yani
SELECT
SUM(GELIRPROJE_HD.GPHD_ODENEN) AS ODENEN,
SUM(GELIRPROJE_HD.GPHD_ODENECEK) AS ODENECEK,
DAIRENO.DAIREKODU,
DAIRENO.ID,
GELIRPROJE_HD.GPHD_BORCLU,
UYELER.ADI,
UYELER.SOYADI,
UYELER.ESKI
FROM
GELIRPROJE_HD
LEFT OUTER JOIN DAIRENO ON (GELIRPROJE_HD.GPHD_DAIRENO = DAIRENO.ID),
UYELER
WHERE
(GELIRPROJE_HD.GPHD_ODEMETARIHI >= 11.10.2007) AND
(GELIRPROJE_HD.GPHD_ODEMETARIHI <= 12.12.2007)
GROUP BY
DAIRENO.DAIREKODU,
DAIRENO.ID,
GELIRPROJE_HD.GPHD_BORCLU,
UYELER.ADI,
UYELER.SOYADI,
UYELER.ESKI
HAVING
(UYELER.ESKI = 0) OR
(UYELER.ESKI IS NULL)
Procedure Forum.Imza(Sender: TObject)
Begin
ShowMessage('Her türlü fikire, Her zaman açığım')
End;
UNION kullanarak öncekileri ayrı toplatabilirsin. Daha doğrusu SELECT teki alan sayıları ve tipleri aynı olan birden çok sorguyu bu şekilde birbirine ekleyebilirsin. Her biri farklı satırlar döndürür. ORDER BY kullanılacaksa tek SELECT miş gibi düşünülerek en sonuna eklenir
FB desteklermi bilmem ama SQL Server'da CASE WHEN yapısı vardır. Mesela Türü 1 olan tutarlar Borç, 2 olanlar alacak olan bir tablodaki borç ve alacak tutarlarının toplamlarını göstermek gerekirse.
Sabanakman arkadaşım öncelikle yardımın ve ilgin için teşekkür ederim. ancak bu soruyu sizlere sormadan önce formda dolaştım ve önerdiğin yolu daha önceden denedim firebird de bu olmuyor ve hatta sum içinde if şartınıda denedim gerçekleşmedi.
Rsimsek, sayın abiciğim dediğiniz mantık bana alt alta satırlar sunar ancak ben bunu bir örnekle izah edeyim
Adı Ödenen Ödenecek Toplam
---- -------- ----------- --------
a 0 100 100
b 20 100 80
yukarıdaki sonucu zaten mevcut kod ile alıyorum diyelimki bu sonuç 01.10.2007 ile 12.12.2007 tarihleri arasındaki sonuç olsun ama ben bu sonucu şu şekilde geliştirmek istiyorum sonuca ilave olarak 01.10.2007 tarihinden önceki toplamlarıda eklemek istiyorum
01.10.07 01.07.07
ye kadar ye kadar
Adı Ödenen Ödenecek Toplam Ödenen Ödenecek Top
---- -------- ----------- -------- -------- ----------- ---
a 100 100 0 0 100 100
b 120 100 -20 20 100 80
istediğim bu işte şimdi sayılar arasında matematiksel alaka kurmayın rastgele yazdım sadece istediğim sonucun ne olduğunu anlatmak maksadıyla bu şekilde bir sonuç elde edersem zaten ilişki kurmak sorun değil. umarım anlatabilmişimdir. tekrar teşekkür ederim
Procedure Forum.Imza(Sender: TObject)
Begin
ShowMessage('Her türlü fikire, Her zaman açığım')
End;
sabanakman arkadaşım sen den özür diliyorum daha önce baktığım örmekte case when ifadesi if mantığnda kullanıldığı için eksikliğinden dolayı olmuyormuş verdiğin ifadeyi tekrar inceledim ve işimi gördü çok teşekkür ederim ve ayrıca tekrar özür dilerim. ancak istediğim sonucu almak için kodda değişiklik gerekti paylaşmak istedim
ve tekrar teşekkür ederim
SELECT
SUM(case when GELIRPROJE_HD.GPHD_ODEMETARIHI < '01.11.2007' then GELIRPROJE_HD.GPHD_ODENEN else 0 end) AS DODENEN,
SUM(case when GELIRPROJE_HD.GPHD_ODEMETARIHI < '01.11.2007' then GELIRPROJE_HD.GPHD_ODENECEK else 0 end) AS DODENECEK,
SUM(case when(GELIRPROJE_HD.GPHD_ODEMETARIHI >= '01.11.2007' AND GELIRPROJE_HD.GPHD_ODEMETARIHI <= '28.12.2007') then GELIRPROJE_HD.GPHD_ODENEN else 0 end) AS ODENEN,
SUM(case when(GELIRPROJE_HD.GPHD_ODEMETARIHI >= '01.11.2007' AND GELIRPROJE_HD.GPHD_ODEMETARIHI <= '28.12.2007') then GELIRPROJE_HD.GPHD_ODENECEK else 0 end) AS ODENECEK,
DAIRENO.DAIREKODU,
DAIRENO.ID,
GELIRPROJE_HD.GPHD_BORCLU,
UYELER.ADI,
UYELER.SOYADI,
UYELER.ESKI
FROM
GELIRPROJE_HD
LEFT OUTER JOIN DAIRENO ON (GELIRPROJE_HD.GPHD_DAIRENO = DAIRENO.ID)
LEFT OUTER JOIN UYELER ON (GELIRPROJE_HD.GPHD_DAIRENO = UYELER.DAIRENO)
WHERE
(GELIRPROJE_HD.GPHD_BORCLU = 0)
GROUP BY
DAIRENO.DAIREKODU,
DAIRENO.ID,
GELIRPROJE_HD.GPHD_BORCLU,
UYELER.ADI,
UYELER.SOYADI,
UYELER.ESKI
HAVING
(UYELER.ESKI = 0) OR
(UYELER.ESKI IS NULL)
Procedure Forum.Imza(Sender: TObject)
Begin
ShowMessage('Her türlü fikire, Her zaman açığım')
End;