FireBird Gruplama ile ilgili

Firebird ve Interbase veritabanları ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
zero_g
Üye
Mesajlar: 56
Kayıt: 11 Şub 2004 11:52

FireBird Gruplama ile ilgili

Mesaj gönderen zero_g »

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
aLonE CoDeR
Kıdemli Üye
Mesajlar: 1223
Kayıt: 26 Nis 2005 04:08

Mesaj gönderen aLonE CoDeR »

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.

Kod: Tümünü seç

while Ay < SonAy do
begin
  select sum...
  into Toplam
  Ay = Ay+1;  
  suspend
end
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..
mahsuni
Üye
Mesajlar: 99
Kayıt: 21 Haz 2003 01:09
Konum: Ankara-Mamak

Mesaj gönderen mahsuni »

Select extract(month from tarih),sum(miktar) from XYZ
Group by 1

şeklinde bir deneyiniz.
Kullanıcı avatarı
undefined
Moderator
Mesajlar: 565
Kayıt: 06 Eki 2003 12:01
Konum: Bursa
İletişim:

Mesaj gönderen undefined »

Direk sql le yapılabilecek bir çözüm gelmiyor. Stored procedure içinden Tarihe göre sıralanmış bir For Select döngüsüyle yapabilirsin bence.
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

Belki şöyle bir şey işini görebilir :wink:

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)
Veriler sadece bir yıla aitse yıl kısmı silinebilir :idea:
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Hakan Can
Üye
Mesajlar: 634
Kayıt: 04 Mar 2005 04:27
Konum: Ankara

Mesaj gönderen Hakan Can »

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:

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
şeklinde olacaktır.

İyi çalışmalar.
Cevapla