merhaba arkadaşlar benim sorunum şudur. CARİHAR isminde cari hareketleri tuttuğum bir tablo mevcut. bu tabloda BORÇ , ALACAK ve islem_tarihi field larım mevcut. şimdi yapmak istediğim şu 01-01-2014 ile 31-12-2014 tarihleri arasında Dışarıya olan Borçlarım ve Dışarıdaki Alacaklarıma ait toplam tuıtarları almak istiyorum. şöyleki
Örn1 : A firmasından 1.000TL lik mal aldım 500TL ödeme yaptım dolayısıyla (alacak-borç=sonuç) yani -500TL buda benim borçlu olduğumu gösteriyor.
Örn2 : B Firması benden 2.000TL lik mal aldı 500TL ödedi dolayısıyla alacak-borç=1.500 TL alacaklıyım
Örn3 : C Firmasından 3.000 TL lik mal aldım 1.500 TL ödeme yaptım dolayısıyla alacak-borç=sonuç yani -1.500 TL
Örn 4 : D Firması benden 1.000TL lik mal aldı 500TL ödedi dolayısıyla alacak-borç=500 TL alacaklıyım
şimdi yukarıdaki 3 örneği hesaplarsak
A firması 1000 + C Firması 3000 = 4000 TL borç
A firması 500 + C Firması 1500 = 2000 TL alacak
Dışarı 2.000 TL Borcum var
B firması 2000 + D Firması 1000 = 3000 TL alacak
B firması 500 + D Firması 500 = 1000 TL borç
Dışarıdan 1.000 TL Alacağım var
şimdi bu durumda ben dışarıya 2000TL boçluyum dışarıdanda 1.000tL alacaklıyım bunu gösterecek SQL cümlesini bir türlü oluşturamadım. Mantık ne olmalı yani CARİHAR tablomdaki borç satırlarını ve alacak satırlarını toplayıp borç-alacak yapınca saçma bir sonuç çıkıyor ortaya. yani kısacası dışarıya belirli tarih aralıklarında ne kadar borcum var ne kadar alacağım var hesap mantığını bir türlü kuramadım. yardımcı olacak arkadaşlara şimdiden sonsuz teşekkürler.
SQL de hesaplama işlemi
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
SQL de hesaplama işlemi
Soru Sorarken yazmaya Üşenmeyen Parmaklar Sorunun Çözüldükten Sonra Teşekkür etmeye de Üşenmesin.
-
- Üye
- Mesajlar: 216
- Kayıt: 10 Ara 2013 03:50
Re: SQL de hesaplama işlemi
Şöyle bir şey olabilir. SQL server ise,
select sum(CASE WHEN alacak>borc THEN (alacak-borc) ELSE 0 END) AS alacak, sum(CASE WHEN borc>alacak THEN (borc-alacak) ELSE 0 END) AS borc, sum(alacak-borc) as bakiye
from table where ....
select sum(CASE WHEN alacak>borc THEN (alacak-borc) ELSE 0 END) AS alacak, sum(CASE WHEN borc>alacak THEN (borc-alacak) ELSE 0 END) AS borc, sum(alacak-borc) as bakiye
from table where ....
Re: SQL de hesaplama işlemi
hocam cevabın için teşekkürederim aşağıdaki gibi kodları düzenleyince aslında bir nebzede olsa istediğim sonuç çıkıyor ama bunların genel toplamını nasıl alacağımı bilemedim. kodlarımı ve bu kodla beraber çıkan sonuçların fotoğrafını ekliyorum. yardımınızı rica edecem.xxxjedixxx yazdı:Şöyle bir şey olabilir. SQL server ise,
select sum(CASE WHEN alacak>borc THEN (alacak-borc) ELSE 0 END) AS alacak, sum(CASE WHEN borc>alacak THEN (borc-alacak) ELSE 0 END) AS borc, sum(alacak-borc) as bakiye
from table where ....
Kod: Tümünü seç
set dateformat dmy select cari.cari_id, (SUM(carihar.Borc)-SUM(carihar.Alacak)) as tutar from TCari cari right join TCarihar carihar on Carihar.Cari_id=Cari.Cari_id where carihar.Islem_Tarihi between '01-01-2014' and '31-12-2014' group by cari.Cari_id HAVING (SUM(carihar.borc)-SUM(carihar.Alacak))<0
set dateformat dmy select cari.Cari_id,(SUM(carihar.Borc)-SUM(carihar.Alacak)) as tutar from TCari cari right join TCarihar carihar on Carihar.Cari_id=Cari.Cari_id where carihar.Islem_Tarihi between '01-01-2014' and '31-12-2014' group by cari.Cari_id HAVING (SUM(carihar.borc)-SUM(carihar.Alacak))>0
Soru Sorarken yazmaya Üşenmeyen Parmaklar Sorunun Çözüldükten Sonra Teşekkür etmeye de Üşenmesin.
-
- Üye
- Mesajlar: 216
- Kayıt: 10 Ara 2013 03:50
Re: SQL de hesaplama işlemi
Verdiğim örnek tam da senin istediğin aslında. Ben yapmaya çalıştım ama yazım hatası yapmış olabilirim. Deneyip sonuca bir bakarsın.
Bakiye kısmınıdaki işlemi ters çevirebilirsin. Ben alacak-borc diye düşündüm sen borc-alacak yapabilirsin.
Kod: Tümünü seç
select cari.cari_id, sum(CASE WHEN carihar.alacak>carihar.borc THEN (carihar.alacak-carihar.borc) ELSE 0 END) AS alacak,
sum(CASE WHEN carihar.borc>carihar.alacak THEN (carihar.borc-carihar.alacak) ELSE 0 END) AS borc,
sum(carihar.alacak-carihar.borc) as bakiye
from TCari cari right join TCarihar carihar on Carihar.Cari_id=Cari.Cari_id
where carihar.Islem_Tarihi between '01-01-2014' and '31-12-2014'
group by cari.Cari_id
Re: SQL de hesaplama işlemi
yardımın için teşekkürederim verdiğin örnekle birlikte sorunumu çözmüş bulunuyorum emeğine bilgine sağlık.xxxjedixxx yazdı:Verdiğim örnek tam da senin istediğin aslında. Ben yapmaya çalıştım ama yazım hatası yapmış olabilirim. Deneyip sonuca bir bakarsın.
Bakiye kısmınıdaki işlemi ters çevirebilirsin. Ben alacak-borc diye düşündüm sen borc-alacak yapabilirsin.Kod: Tümünü seç
select cari.cari_id, sum(CASE WHEN carihar.alacak>carihar.borc THEN (carihar.alacak-carihar.borc) ELSE 0 END) AS alacak, sum(CASE WHEN carihar.borc>carihar.alacak THEN (carihar.borc-carihar.alacak) ELSE 0 END) AS borc, sum(carihar.alacak-carihar.borc) as bakiye from TCari cari right join TCarihar carihar on Carihar.Cari_id=Cari.Cari_id where carihar.Islem_Tarihi between '01-01-2014' and '31-12-2014' group by cari.Cari_id
Soru Sorarken yazmaya Üşenmeyen Parmaklar Sorunun Çözüldükten Sonra Teşekkür etmeye de Üşenmesin.
- ender_arslanturk
- Kıdemli Üye
- Mesajlar: 709
- Kayıt: 18 Şub 2005 03:38
- Konum: İstanbul
Re: SQL de hesaplama işlemi
Selâmlar,
Hesapları Borç, Alacak, Bakiye listeleyebilmenin için en sağlam şekli için veritabanında bir bakiye alanı açmanızı öneririm. Cari hesabın veya stok tanımının ilgili formu açıldığında borç alacak / giren çıkan döngüsüyle bakiye/kalan alanlarını doldurabilirsiniz. Dolayısıyla yoğun bir işlemi bulunan cariler de veya stoklarda performans elde edilmiş olur. Query de calculaded olarak yapmak performansta ciddi bir düşüşe sebep olacaktır. !
İyi çalışmalar,
Hesapları Borç, Alacak, Bakiye listeleyebilmenin için en sağlam şekli için veritabanında bir bakiye alanı açmanızı öneririm. Cari hesabın veya stok tanımının ilgili formu açıldığında borç alacak / giren çıkan döngüsüyle bakiye/kalan alanlarını doldurabilirsiniz. Dolayısıyla yoğun bir işlemi bulunan cariler de veya stoklarda performans elde edilmiş olur. Query de calculaded olarak yapmak performansta ciddi bir düşüşe sebep olacaktır. !
İyi çalışmalar,