Bu SQL de hata nerde

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
Kullanıcı avatarı
mikser
Üye
Mesajlar: 120
Kayıt: 30 Haz 2003 09:54
Konum: Ankara

Bu SQL de hata nerde

Mesaj gönderen mikser »

Herkese Selamlar....

FB 1.5 - IBQuery

3 tane tablo var.
FISLER - FISURUN -> master - detail

Kod: Tümünü seç

FISLER

YIL     FISNO    TARIH              ACIKLAMA   
2005       1       01.01.2005         1111
2005       2       02.02.2005         2222
2006       1       01.01.2006         333333
......

FISURUN

YIL    FISNO    URUNKOD       METREKARE
2005     1               1                4
2005     1               2                3
2005     2               1                10
2005     2               3                6
2006     1               3                5 


URUNLER

KOD        URUN_AD
  1            aaaa
  2            bbbb
  3            ccccc
  4            ddddd


sql de şu sekilde


SELECT URUNLER.URUN_AD, SUM(FISURUN.METREKARE)
FROM FISURUN
  INNER  JOIN URUNLER
   ON  (FISURUN.URUNKOD = URUNLER.KOD)
  INNER  JOIN FISLER
   ON  (FISURUN.FISNO = FISLER.FISNO)
   where FISLER.YIL like :paramVar1 AND 
  FISLER.TARIH >= :paramVar2 AND 
  FISLER.TARIH <=:paramVar3 
group by URUNLER.URUN_AD

belli bir tarih aralıgında işlem gören ürünlerin toplam metrekaresi alinacak.

aaaa 25
bbbb 30
cccc 16

gibi bi sonuc nasıl alinabilir??

Yukarıdaki SQL de sonuclar doğru gelmiyor.
fislerde olmayan fakat ürünler tablosunda olan (örneeğin dddd ürünü) kayıtlarda karsısında bir toplamla geliyor.

herkese tesekkurler....
Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

Mesaj gönderen vkamadan »

merhaba ,

Kod: Tümünü seç

where FISLER.YIL like :paramVar1 AND 
buradaki like kaldırıp denediniz mi?
Volkan KAMADAN
www.polisoft.com.tr
Kullanıcı avatarı
mikser
Üye
Mesajlar: 120
Kayıt: 30 Haz 2003 09:54
Konum: Ankara

Mesaj gönderen mikser »

denedim ustad... olmuyor.

Kod: Tümünü seç

SELECT URUNLER.URUN_AD, SUM(FISURUN.METREKARE) 
FROM FISURUN 
  INNER  JOIN URUNLER 
   ON  (FISURUN.URUNKOD = URUNLER.KOD) 
  INNER  JOIN FISLER 
   ON  (FISURUN.FISNO = FISLER.FISNO) 
   where FISLER.YIL = 2005 AND 
  FISLER.TARIH >= '01.01.2005' AND 
  FISLER.TARIH <='30.06.2005' 
group by URUNLER.URUN_AD
seklinde de denedim fakat sonuc gene aynı.
aLonE CoDeR
Kıdemli Üye
Mesajlar: 1223
Kayıt: 26 Nis 2005 04:08

Mesaj gönderen aLonE CoDeR »

Merhaba.
Şunu merak ettim, işlem görenleri listelemek istediğinize göre neden fisürün yerine ürünler tablosundan sorgulama yapıyorsunuz?
Kullanıcı avatarı
mikser
Üye
Mesajlar: 120
Kayıt: 30 Haz 2003 09:54
Konum: Ankara

Mesaj gönderen mikser »

.....FROM FISURUN .... zaten fısurun dosyasından veri getiriyor.

tarih alanı FISLER dosyasında oldugundan onuda kullanmak zorundayim. cunku TARIH alanına kriter vermek gerekiyor.

Urun adları da URUNLER dosyasından gelecek...
aLonE CoDeR
Kıdemli Üye
Mesajlar: 1223
Kayıt: 26 Nis 2005 04:08

Mesaj gönderen aLonE CoDeR »

Dikkatimi çeken nokta select ifadesinin devamında ürünler tablosundan ürün adını almanız..bunu join olduğunuzda alıyor zaten..ayrıca ikinci inner joini left outer join olarak deneyin bir de..
Hakan Can
Üye
Mesajlar: 634
Kayıt: 04 Mar 2005 04:27
Konum: Ankara

Mesaj gönderen Hakan Can »

FISLER ve FISURUN JOIN'ini eksik yapmışsın gibi gözüküyor.

INNER JOIN FISLER
ON (FISURUN.YIL = FISLER.YIL) AND (FISURUN.FISNO = FISLER.FISNO)

demen gerekiyor galiba.

İyi çalışmalar.
Kullanıcı avatarı
gkimirti
Admin
Mesajlar: 1956
Kayıt: 02 Eyl 2003 04:44
Konum: İstanbul

Mesaj gönderen gkimirti »

Kod: Tümünü seç

select u.urun_ad,sum(fu.metrekare) from fisler f
inner join fisurun fu on fu.yil=f.yil and fu.fisno=f.fisno
inner join urunler u on u.kod=fu.urunkod
group by u.urun_ad
ÜŞENME,ERTELEME,VAZGEÇME
Kullanıcı avatarı
mikser
Üye
Mesajlar: 120
Kayıt: 30 Haz 2003 09:54
Konum: Ankara

Mesaj gönderen mikser »

cevap yazan tüm arkadaslara tesekkurler.
YIL = YIL demek lazımmış... onu hesaba katmayınca sonuclar sapitiyor dolayısıyla...

mesele hallolmuştur.
Cevapla