SP ile toplam almak

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ı
KoPilot
Üye
Mesajlar: 185
Kayıt: 05 Eki 2007 08:02

SP ile toplam almak

Mesaj gönderen KoPilot »

Merhaba arkadaşlar;
Bir tablom var, o tablomdan SP ile, ismi aynı olan, ürünlerin toplamını almak istiyorum. Aslında yazdığım kodla aldım ama kayıt sayısı kadar sonuç veriyor bana.

Bu tablom
Resim

Yazdığım SP şöyle

Kod: Tümünü seç

CREATE OR ALTER PROCEDURE SPREP_GUNLUKHAREKETDETAY
RETURNS (
   STSTARIH DATE,
   STOKAD VARCHAR(100),
   MIKTAR DECIMAL(12,6),
   ACIKLAMA VARCHAR(25),
   SATISFIYAT DECIMAL(12,6),
   ALISFIYAT DECIMAL(12,6),
   KDV DECIMAL(12,6))
AS
begin
   for
       select distinct(hd_stokad), hd_tarih, hd_miktar, hd_hareketturu, hd_birimfiyat, hd_alisfiyat, hd_kdv
       from tbl_hareketdetay where hd_tarih='today'
       into :stokad, :ststarih, :miktar, :aciklama, :satisfiyat, :alisfiyat, :kdv
   do
   begin
       select sum(hd_miktar)
       from tbl_hareketdetay where hd_stokad=:stokad and hd_tur=3 group by hd_stokad
       into miktar;
       suspend;
   end
end
dönen sonuç
Resim
burada sorunsuz bir şekilde, aynı isme sahip ürünlerin miktarının toplamını, miktar alanında alıyor. Fakat "distinct" kullanmama rağmen her kayıt için bir değer gösteriyor.


Benim olmasını istediğim
Resim

kod'a kırk takla attırdım ama sonuç alamadım. Yardımcı olursanız sevinirim.
İyi geceler
Dosyalarınızı kendi bulutunuza yedekleyin. Yandex Disk
Eyvallah..
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2356
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Re: SP ile toplam almak

Mesaj gönderen freeman35 »

select *, (select sum(hd_miktar)
from tbl_hareketdetay where hd_stokad=:st.stokad and hd_tur=3) as toplam
from stok_listesi st

- bu arada isimleri pr_key kullanma
- group by hd_stokad her satırı suspend ettiriyorsun
ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5

Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
Kullanıcı avatarı
KoPilot
Üye
Mesajlar: 185
Kayıt: 05 Eki 2007 08:02

Re: SP ile toplam almak

Mesaj gönderen KoPilot »

freeman35 yazdı: 27 Mar 2020 03:26 select *, (select sum(hd_miktar)
from tbl_hareketdetay where hd_stokad=:st.stokad and hd_tur=3) as toplam
from stok_listesi st

- bu arada isimleri pr_key kullanma
- group by hd_stokad her satırı suspend ettiriyorsun
Hocam, teşekkür ederim ilgilendiğiniz için fakat verdiğiniz kod ne yaptıysam derlenmedi. Önce ilk "select" ten sonraki virgül için hata verdi, sonra ben kodu her değiştirdiğimde, derlenmedi.

Ayrıca uyarılarınız için
- isimleri pr_key kullanma demişsiniz ama bu tabloda verebileceğim başka ortak bir alan yok. Ne yapmalıyım?
- Hocam her satırı suspend etmem gerekiyor diye düşünüyordum. Group by kullanmamalımıyım?
Dosyalarınızı kendi bulutunuza yedekleyin. Yandex Disk
Eyvallah..
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2356
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Re: SP ile toplam almak

Mesaj gönderen freeman35 »

ben senin yerine kod yazmadım, o kod sana fikir versin diye idi, copy + paste için değil.
yazar burada :) her bir stok kartı için, hareketlerini almanı anlatmaya çalışmış :)
pr_key Tamsayı olmalı, bu şart değildir, ama en mantıklı ve tüm dünyanın mutabık olduğu budur. Yapmadıysan yapılmadıysa benim için bu tasarım hatasıdır.
her satırı neden suspend ediyorsun? sana lazım mı? istediğin sonuç o mu? emin misin? denedin mi? içerdeki select i bir editörde dene bakalım sonuç ne çıkıyor.
ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5

Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
Kullanıcı avatarı
KoPilot
Üye
Mesajlar: 185
Kayıt: 05 Eki 2007 08:02

Re: SP ile toplam almak

Mesaj gönderen KoPilot »

freeman35 yazdı: 28 Mar 2020 12:15 ben senin yerine kod yazmadım, o kod sana fikir versin diye idi, copy + paste için değil.
yazar burada :) her bir stok kartı için, hareketlerini almanı anlatmaya çalışmış :)
pr_key Tamsayı olmalı, bu şart değildir, ama en mantıklı ve tüm dünyanın mutabık olduğu budur. Yapmadıysan yapılmadıysa benim için bu tasarım hatasıdır.
her satırı neden suspend ediyorsun? sana lazım mı? istediğin sonuç o mu? emin misin? denedin mi? içerdeki select i bir editörde dene bakalım sonuç ne çıkıyor.
:lol: :lol:
Dosyalarınızı kendi bulutunuza yedekleyin. Yandex Disk
Eyvallah..
Kullanıcı avatarı
KoPilot
Üye
Mesajlar: 185
Kayıt: 05 Eki 2007 08:02

Re: SP ile toplam almak

Mesaj gönderen KoPilot »

Merhaba;

İbExpert'in sql editöründe yazdığım bir sql kodunu çalıştırdım. Aslında istediğim sonucu veriyor ama id sini verdiğim tek kayıt için veriyor. Ben bunu (benzersiz) her kayıt için yapmak istiyorum. Yardımcı olursanız sevinirim.

Kod: Tümünü seç

select sum(hd_miktar), hd_stokad, hd_tarih from tbl_hareketdetay
where hd_tarih='today' and hd_tur=3 and hd_barkodid=(select brk_id from tbl_barkod where brk_id=3)
group by hd_stokad, hd_tarih
Dosyalarınızı kendi bulutunuza yedekleyin. Yandex Disk
Eyvallah..
Kullanıcı avatarı
KoPilot
Üye
Mesajlar: 185
Kayıt: 05 Eki 2007 08:02

Re: SP ile toplam almak

Mesaj gönderen KoPilot »

Kod: Tümünü seç

SELECT sum(hd_miktar) as adet, hd_stokad, hd_tarih from tbl_hareketdetay
   where hd_tarih='today' and hd_tur=3
   group by hd_stokad, hd_tarih
Bu kod sql editörde çalıştırdığımda istediğim sonucu veriyor fakat aşağıdaki gibi sp içine yerleştirince derleniyor fakat 'ıırrtt' diye bir ses çıkararak hiç bir sonuç vermiyor.

Kod: Tümünü seç

CREATE OR ALTER PROCEDURE SPREP_GUNLUKHAREKETDETAY
RETURNS (
    STSTARIH DATE,
    STOKAD VARCHAR(100),
    MIKTAR DECIMAL(12,6))
AS
begin
    SELECT sum(hd_miktar) as adet, hd_stokad, hd_tarih from tbl_hareketdetay
    where hd_tarih='today' and hd_tur=3
    group by hd_stokad, hd_tarih
    into :miktar, :stokad, :ststarih;
end
Dosyalarınızı kendi bulutunuza yedekleyin. Yandex Disk
Eyvallah..
ikra
Üye
Mesajlar: 900
Kayıt: 28 Nis 2005 01:26
Konum: Simdilik Topragin Üstü

Re: SP ile toplam almak

Mesaj gönderen ikra »

Kodun sonunda suspend yok.
kıdemsiz üye
Kullanıcı avatarı
KoPilot
Üye
Mesajlar: 185
Kayıt: 05 Eki 2007 08:02

Re: SP ile toplam almak

Mesaj gönderen KoPilot »

ikra yazdı: 29 Mar 2020 05:46 Kodun sonunda suspend yok.
Yok hocam, orjinalinde var, buraya geçirirken yanlışlık olmuş.
Dosyalarınızı kendi bulutunuza yedekleyin. Yandex Disk
Eyvallah..
Kullanıcı avatarı
KoPilot
Üye
Mesajlar: 185
Kayıt: 05 Eki 2007 08:02

Re: SP ile toplam almak

Mesaj gönderen KoPilot »

Kod: Tümünü seç

begin
 FOR
   SELECT sum(hd_miktar) as adet, hd_stokad, hd_tarih from tbl_hareketdetay
   where hd_tarih='today' and hd_tur=3
   group by hd_stokad, hd_tarih
   into :miktar, :stokad, :ststarih
   DO
   SUSPEND;
end
Anemos hocam sağolsun dikkatsizliğimi gözüme soktu :D
Çözüm yukarıdaki kod...
Dosyalarınızı kendi bulutunuza yedekleyin. Yandex Disk
Eyvallah..
Cevapla