sql sorunu 2

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
beyaz_01
Üye
Mesajlar: 22
Kayıt: 21 Nis 2005 02:38
Konum: Adana
İletişim:

sql sorunu 2

Mesaj gönderen beyaz_01 »

arkadaslar,
artik hepinizin bildigi stok programinda son asamaya geldim ve klasik olarak bir problemle karsilastim.stoktaki her urunun bir kritik stok miktari var ve her urun icin bu kritik stok miktari farkli.sql de bu kritik stok miktarinin altinda olan urunleri listeletmek istiyorum.group by ve having komutunu kullaniyorum.problem su: ilk urunun kritik stok miktari 500.listelerken sadece 500'un altinda olan urunleri listeliyor.oysa her urunun kritik stok miktari farkli.her urunu kendi kritik stok miktarinin asagisindaysa listeletmek istiyorum.nasil yaparim?
kodlarim su sekilde;
Query1.Close;
Query1.SQl.Clear;
Query1.SQL.Add('select Malzeme.Malzeme_Cinsi,Malzeme.Kritik_Stok_Miktari,sum(stok.Miktar*stok.Girdi_Cikti) Mevcut');
Query1.SQL.Add('from Stok,Malzeme where Malzeme.Kodu=Stok.Malzeme group by Malzeme.Kritik_Stok_Miktari,Malzeme.Malzeme_Cinsi having sum(stok.Miktar*stok.Girdi_Cikti)<Malzeme.Kritik_Stok_Miktari');
Query1.open;
Query1.Refresh;
Kullanıcı avatarı
naile
Admin
Mesajlar: 1873
Kayıt: 11 Haz 2003 10:11

Mesaj gönderen naile »

Kod doğru görünüyor, dönen değerler yanlış mı?
Kullanıcı avatarı
beyaz_01
Üye
Mesajlar: 22
Kayıt: 21 Nis 2005 02:38
Konum: Adana
İletişim:

Mesaj gönderen beyaz_01 »

kod bi problem vermiyor ama sadece 500 den kucuk olanlari gosteriyor.soyle ki a urununun kritik stok miktari 500, b urununun kritik stok miktari 100.b urununden 400 tane var( yani b urunu kendi kritik stok miktarindan fazla) ama b urununu genede listeliyor.b urununu 501 adet yapiyorum, o zaman b urununu listelemiyor.benim suphelendigim kritik stok miktari olarak a urununun kritik stok miktarini aliyor.(a urunu ilk kayit).
doganzorlu
Kıdemli Üye
Mesajlar: 395
Kayıt: 22 Tem 2004 09:15
Konum: İzmir
İletişim:

Mesaj gönderen doganzorlu »

Selam,

Kod: Tümünü seç

SELECT   malzeme.malzeme_cinsi, malzeme.kritik_stok_miktari,
         SUM (stok.miktar * stok.girdi_cikti) mevcut
    FROM stok, malzeme
   WHERE malzeme.kodu = stok.malzeme
GROUP BY malzeme.kritik_stok_miktari, malzeme.malzeme_cinsi
  HAVING SUM (stok.miktar * stok.girdi_cikti) < malzeme.kritik_stok_miktari
Yukardan anlaşılan malzeme_cinsi ne göre bir grup yaptığınız. Grubun toplamını malzeme nin kritiğiyle karşılaştırıyorsunuz bu yanlış sonuca neden oluyor. Bu nedenle;

Kod: Tümünü seç

SELECT   malzeme_cinsi, SUM (mevcut) mevcut
    FROM (SELECT   malzeme.malzeme_cinsi, malzeme.malzeme_kodu,
                   malzeme.kritik_stok_miktari,
                   SUM (stok.miktar * stok.girdi_cikti) mevcut
              FROM stok, malzeme
             WHERE malzeme.kodu = stok.malzeme
          GROUP BY malzeme.malzeme_cinsi,
                   malzeme.malzeme_kodu,
                   malzeme.kritik_stok_miktari
            HAVING SUM (stok.miktar * stok.girdi_cikti) <
                                                   malzeme.kritik_stok_miktari)
GROUP BY malzeme_cinsi
şeklinde bir query ile malzeme cinsleri bazında toplam gösterebilirsiniz. İç query de ürün toplamlarını kritik miktarlarıyla karşılaştırıp cins,ürün,miktar oluşturuluyor. Dışta ise buradan özet bilgi oluşturuluyor.

Kolay gelsin,
Doğan Zorlu, İzmir

------------------------
"Bu Kitap'ı sana yalnız şunun için indirdik: Hakkında ayrılığa düştükleri şeyi onlara iyice açıklayasın ve Kitap, iman eden bir topluluk için kılavuz ve rahmet olsun." (NAHL 64)
mkysoft
Kıdemli Üye
Mesajlar: 3110
Kayıt: 26 Ağu 2003 12:35
Konum: Berlin
İletişim:

Mesaj gönderen mkysoft »

bu soruyu veri tabanı sql bölümüne sorman daha iyi olurdu. moderator arkadaşlar taşıyacaktır sanırım. şu şekilde bir kod kullanmalısın.

select Malzeme.Malzeme_Cinsi,Malzeme.Kritik_Stok_Miktari
, (select sum(stok.Miktar*stok.Girdi_Cikti) as Mevcut from Stok where Stok.Malzeme=Malzeme.Kodu group by stok.Malzeme_kod) from Malzeme where Mevcut<Malzeme.Kritik_Stok_Miktari');
Cevapla