SQL

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
abdulkadir
Kıdemli Üye
Mesajlar: 489
Kayıt: 13 Eyl 2003 09:10
Konum: istanbul
İletişim:

SQL

Mesaj gönderen abdulkadir »

S.a
Asagıdaki SQL ile bütün Carilerin Carihareket tablosundan alacak ve borc alanlarını sorguluyarak genel bir filitre uyguluyorum
Asagıdaki kod calısıyor ben ama bu söyle bir filitre eklemek istiyorum.
Alacak , Borc tutarı birbirine = eşit olanlar listelensin

Kod: Tümünü seç

SELECT DISTINCT 
CARI.BLKODU, CARI.CARIKODU, CARI.GRUBU, CARI.ARA_GRUBU,
CARI.ALT_GRUBU, CARI.OZEL_KODU1, CARI.OZEL_KODU2, CARI.OZEL_KODU3,
CARI.TICARI_UNVANI, CARI.ADI, CARI.SOYADI, CARI.VERGI_DAIRESI,
CARI.VERGI_NO, CARI.TEL1,CARI.TEL2, CARI.EV_TEL, CARI.CEP_TEL,
CARI.FAKS, CARI.E_MAIL,CARI.DOVIZ_KULLAN, CARI.DOVIZ_BIRIMI,
CARI.ADRESI_1, CARI.ILI_1,CARI.ILCESI_1,CARI.AKTIF,CARI.SUBE_KODU,

SUM(CH.KPB_BTUT) AS TPL_BRC,
SUM(CH.KPB_ATUT) AS TPL_ALC,
SUM(CH.KPB_BTUT) - SUM(CH.KPB_ATUT)  AS TPL_BKY,
/* onCalcFields için lazım */
(SELECT  CASE 
WHEN SUM(CH.KPB_ATUT) = SUM(CH.KPB_BTUT) THEN 0
WHEN SUM(CH.KPB_ATUT) < SUM(CH.KPB_BTUT) THEN 1
WHEN SUM(CH.KPB_ATUT) > SUM(CH.KPB_BTUT) THEN 2
ELSE 0 END AS TPL_BTR
FROM  CARIHR CH
WHERE CARI.BLKODU = CH.BLCRKODU) AS TPL_BTR,

SUM(CH.DVZ_BTUT) AS DVZ_TPLBRC,
SUM(CH.DVZ_ATUT) AS DVZ_TPLALC,
SUM(CH.DVZ_BTUT) - SUM( CH.DVZ_ATUT ) AS DVZ_BAKIYE,
/* onCalcFields için lazım */
(SELECT  CASE 
WHEN SUM(CH.DVZ_ATUT) = SUM(CH.DVZ_BTUT) THEN 0
WHEN SUM(CH.DVZ_ATUT) < SUM(CH.DVZ_BTUT) THEN 1
WHEN SUM(CH.DVZ_ATUT) > SUM(CH.DVZ_BTUT) THEN 2
ELSE 0 END AS DVZ_BTR
/* onCalcFields için lazım */
FROM  CARIHR CH
WHERE CARI.BLKODU = CH.BLCRKODU) AS DVZ_BTR,
/* onCalcFields için lazım */
(SELECT  MAX(TARIHI) FROM CARIHR CH 
WHERE CARI.BLKODU = CH.BLCRKODU) AS SONISLEM_TARIHI,
/* onCalcFields için lazım */
(SELECT  MAX(VADESI) FROM CARIHR CH
WHERE CARI.BLKODU = CH.BLCRKODU) AS SONVADE_TARIHI

FROM CARI
INNER JOIN CARIHR CH ON (CARI.BLKODU = CH.BLCRKODU)

WHERE (
(CARI.BLKODU = CH.BLCRKODU)
       /*------------- AND SUM(CH.KPB_ATUT) = SUM(CH.KPB_BTUT)--------------  */
 /*bu satır hata veriyor SELECT Yapıyorum HAVING istiyor HAVING Yapıyorum baska sıkıntılar cıkıyor derleyemedim maalesef- */
)
GROUP BY
CARI.BLKODU, CARI.CARIKODU, CARI.GRUBU, CARI.ARA_GRUBU,
CARI.ALT_GRUBU, CARI.OZEL_KODU1, CARI.OZEL_KODU2, CARI.OZEL_KODU3,
CARI.TICARI_UNVANI, CARI.ADI, CARI.SOYADI, CARI.VERGI_DAIRESI,
CARI.VERGI_NO, CARI.TEL1, CARI.TEL2, CARI.EV_TEL, CARI.CEP_TEL,
CARI.FAKS, CARI.E_MAIL, CARI.DOVIZ_KULLAN, CARI.DOVIZ_BIRIMI,
CARI.ADRESI_1, CARI.ILI_1, CARI.ILCESI_1, CARI.AKTIF, CARI.SUBE_KODU
ORDER BY SUM(CH.KPB_ATUT) DESC
umarım anlatabilidim
bakiye türü
sadece sıfır veya borc veya alacakları listelemek istiyorum.
Fikirleri Aktar
Kaynakları Dagıt
Ve
Yoldan Çekil
http://www.Leventler.com.tr
emin_as
Üye
Mesajlar: 559
Kayıt: 01 Eki 2008 10:05
Konum: izmir
İletişim:

Re: SQL

Mesaj gönderen emin_as »

select .. group by ... having toplam_borc = 0

toplam_borc adli alanin 0 oldugu ( sum(borc) as toplam_borc gibi bir alan) kayıtları listeler.

SQL de where listelenecek kayıtları belirler. Group by kullanıyorsa, where group by daki sum, count gibi hesaplamaya girecek kayıtları belirler. Group by sonunda ortaya çıkan listeyi sınırlamak istersen having kullanırsın. Having where in group by sonrasında kullanılan türü gibidir.
abdulkadir
Kıdemli Üye
Mesajlar: 489
Kayıt: 13 Eyl 2003 09:10
Konum: istanbul
İletişim:

Re: SQL

Mesaj gönderen abdulkadir »

Tesekkür ederim

Sorun halloldu Yukardaki SQL cümlesinin Sonuna.....

Kod: Tümünü seç

HAVING(
(SUM(CH.KPB_ATUT)
>
SUM(CH.KPB_BTUT)))
işlem tamam.
Kolay gelsin....
Fikirleri Aktar
Kaynakları Dagıt
Ve
Yoldan Çekil
http://www.Leventler.com.tr
Cevapla