Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
SP ile toplam almak
#1
Merhaba arkadaşlar;
Bir tablom var, o tablomdan SP ile aynı isimli ürünlerin toplamını almak istiyorum. Aslında yazdığım kodla aldım ama kayıt sayısı kadar sonuç veriyor bana.

Bu tablom
[img]KYYUdC.png[/img]

Yazdığım SP şöyle
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
       into miktar;
       suspend;
   end
end

dönen sonuç
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.
[img]BlzBjo.png[/img]

Benim olmasını istediğim
[img]RiIk4z.png[/img]

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..
Cevapla
#2
(27-03-2020, Saat: 00:53)Aktolgali Adlı Kullanıcıdan Alıntı: Merhaba arkadaşlar;
Bir tablom var, o tablomdan SP ile aynı isimli ürünlerin toplamını almak istiyorum. Aslında yazdığım kodla aldım ama kayıt sayısı kadar sonuç veriyor bana.

Yazdığım SP şöyle
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
       into miktar;
       suspend;
   end
end

dönen sonuç
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.
[img]BlzBjo.png[/img]

Benim olmasını istediğim
[img]RiIk4z.png[/img]

kod'a kırk takla attırdım ama sonuç alamadım. Yardımcı olursanız sevinirim.
İyi geceler

Merhabalar,

Group by STOKAD

deneyin lütfen.

Nacizane tavsiyem, Group by veya Where koşullarında direk isim kullanmayın.
ID (int) ile işlem yapmanızı öneririm. Hem hataların önüne geçmek, hem de hız kazanmak için.
Index de unutmayın...

Kolay gelsin.
Amaç, bilginin de/aklın da zekat'ını vermek.
Cevapla
#3
Hareket tablosunu distinct yaparak toplam almak hatalı bir kurgu gibi görünüyor. Örneğin alış veya satış fiyatının aynı olmaması durumunda, "distinct" tekrarlı sonuç döndürebilir. Sorgunuzu tekrar gözden geçirmenizi tavsiye ederim.
Cevapla
#4
Stokları stok hareketlerinden değilde stok tablosundan çekin, sonuçta hareket tablosunda işlemtürü, satış fiyatı, alış fiyatı vs. nin görünmesine gerek yok, Stok tablosunun altında hareketleri gösterin sadece, alış satış fiyatlarınında ortalamasını gosterebilirsiniz.
WWW
Cevapla
#5
(27-03-2020, Saat: 09:30)esistem Adlı Kullanıcıdan Alıntı: Stokları stok hareketlerinden değilde stok tablosundan çekin, sonuçta hareket tablosunda işlemtürü, satış fiyatı, alış fiyatı vs. nin görünmesine gerek yok, Stok tablosunun altında hareketleri gösterin sadece, alış satış fiyatlarınında ortalamasını gosterebilirsiniz.

@esistem hocam bu eski çalışan bir program, dolayısıyla dediğiniz şeyler doğru ama yapısal değişikliğe gidip bir sürü iş çıkarmak istemiyorum. Verdiğiniz fikir için teşekkür ederim.

(27-03-2020, Saat: 01:13)hi_selamlar Adlı Kullanıcıdan Alıntı:
(27-03-2020, Saat: 00:53)Aktolgali Adlı Kullanıcıdan Alıntı: Merhaba arkadaşlar;
Bir tablom var, o tablomdan SP ile aynı isimli ürünlerin toplamını almak istiyorum. Aslında yazdığım kodla aldım ama kayıt sayısı kadar sonuç veriyor bana.

Yazdığım SP şöyle
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
       into miktar;
       suspend;
   end
end

dönen sonuç
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.
[img]BlzBjo.png[/img]

Benim olmasını istediğim
[img]RiIk4z.png[/img]

kod'a kırk takla attırdım ama sonuç alamadım. Yardımcı olursanız sevinirim.
İyi geceler

Merhabalar,

Group by STOKAD

deneyin lütfen.

Nacizane tavsiyem, Group by veya Where koşullarında direk isim kullanmayın.
ID (int) ile işlem yapmanızı öneririm. Hem hataların önüne geçmek, hem de hız kazanmak için.
Index de unutmayın...

Kolay gelsin.

Column does not belong to referenced table.
Dynamic SQL Error.
SQL error code = -206.
Column unknown.
STOKAD.
At line 20, column 9.
verdiği hata bu. SP'nin dönen değeri olduğu için sanırım.

(27-03-2020, Saat: 09:19)anemos Adlı Kullanıcıdan Alıntı: Hareket tablosunu distinct yaparak toplam almak hatalı bir kurgu gibi görünüyor. Örneğin alış veya satış fiyatının aynı olmaması durumunda, "distinct" tekrarlı sonuç döndürebilir. Sorgunuzu tekrar gözden geçirmenizi tavsiye ederim.

@anemos hocam bu hareketdetay tablosu ve yukarıdaki kodla sadece rapor alıyorum, bu tablo üzerinde düzenleme veya ekleme yapmıyorum. Bu bilgilere göre kurgu yanlış mı? Öneriniz nedir, ne yapmalıyım?
Dosyalarınızı kendi bulutunuza yedekleyin. Yandex Disk

Eyvallah..
Cevapla
#6
Hocam o zaman şöyle yapmalısın;
önce for select ile distinct kullanarak sadece stok adını al, for select içinde first ile stok ile ilgili bilgileri ve altında hareket toplamlarını al.
WWW
Cevapla
#7
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. Yani döngüye nasıl sokabilirim.


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

    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.

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..
Cevapla
#8
Merhaba. Yazım hatası görünüyor. Aşağıdaki begin-end aralığını aşağıdaki gibi düzenleyin.

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
Cevapla
#9
Big Grin 
(29-03-2020, Saat: 18:34)anemos Adlı Kullanıcıdan Alıntı: Merhaba. Yazım hatası görünüyor. Aşağıdaki begin-end aralığını aşağıdaki gibi düzenleyin.

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 çok teşekkür ederim. Koda kırk takla attırdım ama çözüm kırkbirinci takladaymış  Big Grin
Tekrar teşekkür ederim ilginiz için
Dosyalarınızı kendi bulutunuza yedekleyin. Yandex Disk

Eyvallah..
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  arkada kalan programı öne almak hk. sadikacar60 0 109 26-02-2020, Saat: 00:15
Son Yorum: sadikacar60
  Karel Ms128 Com port Bilgi almak erdem55 16 3.488 10-01-2020, Saat: 15:15
Son Yorum: fmesta
  Fast Report tfrxDBCrossView Toplam Alanını A-Z, Z-A Sıralamak pro_imaj 1 665 28-12-2018, Saat: 22:50
Son Yorum: pro_imaj
  Firma Bilgilerini Almak glagher 3 1.111 22-09-2018, Saat: 21:02
Son Yorum: sabanakman
  FastReport Form'dan tarih bilgisi almak yhackup 2 1.290 20-11-2017, Saat: 10:42
Son Yorum: yhackup



Konuyu Okuyanlar: 1 Ziyaretçi