Gruplama yapınca cariyi neden sadece bir kayıt olarak göster

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
akkaya83
Üye
Mesajlar: 19
Kayıt: 01 Tem 2003 10:23
İletişim:

Gruplama yapınca cariyi neden sadece bir kayıt olarak göster

Mesaj gönderen akkaya83 »

Gruplama yapınca cariyi neden sadece bir kayıt olarak göstermiyor bir türlü çözemedim. gc leri -1 ve 1 olanlar diye iki kayıt gösteriyor...

Nasıl tek bir cari olarak gösterebilirim

SELECT cari_adi,gc,fatura_tarihi as hareket_tarihi, fatura_tipi as hareket_turu,fatura_belge_no as belge_no, aciklama,
SUM(CASE WHEN GC = 1 THEN genel_toplam ELSE 0 END) AS ToplamAlacak, SUM(CASE WHEN GC = -1 THEN (genel_toplam * (-1)) ELSE 0 END) AS ToplamBorc, SUM(genel_toplam * GC) As ToplamBakiye
FROM mev_fatura_hareket where fatura_tarihi between "2004-01-01" and "2007-01-01" and cari_kodu like "%" GROUP BY cari_adi
UNION ALL SELECT cari_adi,gc,fis_tarihi as hareket_tarihi,fis_turu as hareket_turu,fis_no as belge_no,likidite_turu as aciklama,
SUM(CASE WHEN GC = 1 THEN para_tutari ELSE 0 END) AS ToplamAlacak, SUM(CASE WHEN GC = -1 THEN (para_tutari * (-1)) ELSE 0 END) AS ToplamBorc, SUM(para_tutari * GC) As ToplamBakiye
FROM mev_cari_borc_alacak_fisi where fis_tarihi between "2004-01-01" and "2007-01-01" and cari_kodu like "%" GROUP BY cari_adi order by hareket_tarihi
En son akkaya83 tarafından 12 May 2006 05:38 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Kullanıcı avatarı
nitro
Üye
Mesajlar: 1112
Kayıt: 23 Ağu 2004 01:18
Konum: Çanakkale
İletişim:

Mesaj gönderen nitro »

Kod: Tümünü seç

SELECT cari_adi,gc,fatura_tarihi as hareket_tarihi, fatura_tipi as hareket_turu,fatura_belge_no as belge_no, aciklama,
SUM(CASE WHEN GC = 1 THEN genel_toplam ELSE 0 END) AS ToplamAlacak, SUM(CASE WHEN GC = -1 THEN (genel_toplam * (-1)) ELSE 0 END) AS ToplamBorc, SUM(genel_toplam * GC) As ToplamBakiye
FROM mev_fatura_hareket where fatura_tarihi between "2004-01-01" and "2007-01-01" and cari_kodu like "%" GROUP BY cari_kodu
UNION ALL SELECT cari_adi,gc,fis_tarihi as hareket_tarihi,fis_turu as hareket_turu,fis_no as belge_no,likidite_turu as aciklama,
SUM(CASE WHEN GC = 1 THEN para_tutari ELSE 0 END) AS ToplamAlacak, SUM(CASE WHEN GC = -1 THEN (para_tutari * (-1)) ELSE 0 END) AS ToplamBorc, SUM(para_tutari * GC) As ToplamBakiye
FROM mev_cari_borc_alacak_fisi where fis_tarihi between "2004-01-01" and "2007-01-01" and cari_kodu like "%" GROUP BY belge order by hareket_tarihi
Bak bu kodda belgeye göre gruplandırmışsın, iyi güzel AMA; belgeye göre gruplandırmak ne demek? cevap: aynı belge numarası olan kayıtları bir arada göstermek demek. aynı belge numarası olan kayıtlar var önümüzde, belge numaraları aynı: peki cari isimleri ne? onlar da aynı mı? aynı olmazsa onlar ayrı kayır gibi gözükür. yani grupta iki farklı tip gc varsa bunlar iki grup olurlar. burada ufak bir sql ayak oyunu yapmak lazım. KURAL: GRUPLANDIRMA YAPTIĞIN SORGULARDA SELECT KISMINDA

Kod: Tümünü seç

SELECT cari_adi,
GİBİ BİR İFADE KULLANMA. selectdeki fieldleri max, min, sum, count gibi çoklu kayıtlara hitap eden ibarelerle kullan. sorun çözülür. yani senin kodun: şöyle olsa çalışır.

Kod: Tümünü seç

SELECT max(cari_adi),max(gc),max(fatura_tarihi) as hareket_tarihi, max(fatura_tipi) as hareket_turu,....
SUM(CASE WHEN GC = 1 THEN genel_toplam ELSE 0 END) AS ToplamAlacak, SUM(CASE WHEN GC = -1 THEN (genel_toplam * (-1)) ELSE 0 END) AS ToplamBorc, SUM(genel_toplam * GC) As ToplamBakiye
FROM mev_fatura_hareket where fatura_tarihi between "2004-01-01" and "2007-01-01" and cari_kodu like "%" GROUP BY cari_kodu
UNION ALL SELECT cari_adi,gc,fis_tarihi as hareket_tarihi,fis_turu as hareket_turu,fis_no as belge_no,likidite_turu as aciklama,
SUM(CASE WHEN GC = 1 THEN para_tutari ELSE 0 END) AS ToplamAlacak, SUM(CASE WHEN GC = -1 THEN (para_tutari * (-1)) ELSE 0 END) AS ToplamBorc, SUM(para_tutari * GC) As ToplamBakiye
FROM mev_cari_borc_alacak_fisi where fis_tarihi between "2004-01-01" and "2007-01-01" and cari_kodu like "%" GROUP BY belge order by hareket_tarihi
akkaya83
Üye
Mesajlar: 19
Kayıt: 01 Tem 2003 10:23
İletişim:

yaptım olmadı...

Mesaj gönderen akkaya83 »

üst kısımda yanlış gruplama ibaresi vardı onu düzelttim
şimdi

ve sizin dediğiniz şekilde max() parantezine oldım olmadı....
Kullanıcı avatarı
nitro
Üye
Mesajlar: 1112
Kayıt: 23 Ağu 2004 01:18
Konum: Çanakkale
İletişim:

Mesaj gönderen nitro »

acaba union select olayından mı çıkıyor 2. kayıtlar. union kısmını devredeışı bırakıp deneyin.
kolay gelsin.
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

Sorun order by da kullanılan hareket_tarihi alanı ile ilgilidir. Çünkü ilk select te sadece alias olarak kullanıldığında ve order by her iki select için de ortak olduğundan aynı alanın her iki select te olması gerekir :idea: Order by kısmı kaldırılırsa çalışması lazım.
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
akkaya83
Üye
Mesajlar: 19
Kayıt: 01 Tem 2003 10:23
İletişim:

yine olmadı,

Mesaj gönderen akkaya83 »

order by kısmını kaldırdım yine olmadı...
Hakan Can
Üye
Mesajlar: 634
Kayıt: 04 Mar 2005 04:27
Konum: Ankara

Mesaj gönderen Hakan Can »

Order By'ı sadece bir tane yazın ve hepsinin sonuna koyun (ORDER BY 1, 2, 3 gibi).
gc'yi select listesinden çıkartıp tekrar deneyin.

Bir de bu query firebird'de normalde hata vermesi gerekmiyor mu? Yani Select bölümündeki tüm direkt alanların Group By'da da olması gerekmiyor mu?

İyi çalışmalar.
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Re: yine olmadı,

Mesaj gönderen rsimsek »

akkaya83 yazdı:order by kısmını kaldırdım yine olmadı...
olmadı.. yerine şu hata mesajını verseniz bir zahmet :idea:
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Cevapla