Slm Arkadaşlar Hepinize şimdiden yardımlarınız için tşk.ederim
Benim sorunum şu diyelimki xyz diye bir tablom var ve tablomda
tarih ve tutar alanı var örnek olarak hazırlıyorum
tarih tutar
01.01.2006 100
15.01.2006 50
10.02.2006 25
20.03.2006 75
Şimdi benim istediğim tarih alanındaki ay bilgisine göre tutarları sum yapabilmek.yukarıdaki örneğe göre istediğim sonuç şöyle olmalı
01 150
02 25
03 75 gibi
yardımcı olursanız sevinirim
FireBird Gruplama ile ilgili
-
- Kıdemli Üye
- Mesajlar: 1223
- Kayıt: 26 Nis 2005 04:08
Selamlar.
Bunun için en iyi çözüm stored procedure yazman olacaktır.Tarih aralığını parametre olarak aldıktan sonra while döngüsü kurarak tarih sonuna kadar ay ay sorgulama yapman gerekir.
gibi..Ancak burada dikkat etmen gereken olay tarih aralığında 2 ya da daha fazla yıla ait veri istenmesi durumu..Bu durumda kriterlere yılı da eklemen gerekecektir vs.vs.
Kolay gele..
Bunun için en iyi çözüm stored procedure yazman olacaktır.Tarih aralığını parametre olarak aldıktan sonra while döngüsü kurarak tarih sonuna kadar ay ay sorgulama yapman gerekir.
Kod: Tümünü seç
while Ay < SonAy do
begin
select sum...
into Toplam
Ay = Ay+1;
suspend
end
Kolay gele..
Belki şöyle bir şey işini görebilir
Veriler sadece bir yıla aitse yıl kısmı silinebilir 

Kod: Tümünü seç
select extract(month from tarih) Ay, extract(year from tarih) Yil, sum(tutar) from tablo_adi
group by extract(month from tarih), extract(year from tarih)

Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
CASE WHEN komutu, Sub Select kullanımı vs. gelişmeler sayesinde Select SQL'leri için Stored Procedure kullanımına artık neredeyse ihtiyaç kalmadı.
Örnek vermek gerekirse:
Arkadaşın tablosundan şöyle bir Select sonucu istemiş olalım:
YIL OCAK SUBAT MART NISAN ... ARALIK TOPLAM
2005 1500 37530 4450 15000 ... 176190 990050
2006 6600 35000 4000 50700 ... 120000 789670
Yazacağımız Select ifadesi:
şeklinde olacaktır.
İyi çalışmalar.
Örnek vermek gerekirse:
Arkadaşın tablosundan şöyle bir Select sonucu istemiş olalım:
YIL OCAK SUBAT MART NISAN ... ARALIK TOPLAM
2005 1500 37530 4450 15000 ... 176190 990050
2006 6600 35000 4000 50700 ... 120000 789670
Yazacağımız Select ifadesi:
Kod: Tümünü seç
SELECT
EXTRACT(YEAR FROM TARIH) AS YIL,
SUM(CASE WHEN EXTRACT(MOTH FROM TARIH) = 1 THEN COALESCE(TUTAR, 0) ELSE 0.0 END) AS OCAK,
SUM(CASE WHEN EXTRACT(MOTH FROM TARIH) = 2 THEN COALESCE(TUTAR, 0) ELSE 0.0 END) AS SUBAT,
SUM(CASE WHEN EXTRACT(MOTH FROM TARIH) = 3 THEN COALESCE(TUTAR, 0) ELSE 0.0 END) AS MART,
SUM(CASE WHEN EXTRACT(MOTH FROM TARIH) = 4 THEN COALESCE(TUTAR, 0) ELSE 0.0 END) AS NISAN,
.
.
.
SUM(CASE WHEN EXTRACT(MOTH FROM TARIH) = 12 THEN COALESCE(TUTAR, 0) ELSE 0.0 END) AS ARALIK,
SUM(COALESCE(TUTAR, 0)) AS TOPLAM
FROM TABLO
GROUP BY 1
ORDER BY 1
İyi çalışmalar.