Firebird Stored Procedure ile dönen output alanlardaki birden fazla satır veriyi toplamak

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
mantik20
Üye
Mesajlar: 10
Kayıt: 25 Ağu 2015 09:42

Firebird Stored Procedure ile dönen output alanlardaki birden fazla satır veriyi toplamak

Mesaj gönderen mantik20 »

Merhaba. Öncelikle herkese iyi çalışmalar diliyorum.
Firebird 2.5 versiyonu kullanıyorum. Aşağıdaki gibi bir stored procedure yazdım, sorunsuz çalışıyor. Sorunum; dönen sonuçlardaki birden fazla satırdaki verilerin toplamını da almam gerekiyor. Toplam işlemi için ayrı bir SP yazdım, sorunu çözdüm ama detay için ayrı, toplam için ayrı bir SP kullanmak çok sağlıklı olmadı sanırım ki buna benzer onlarca SP mevcut.
Procedure ve çıktısı aşağıdaki gibi

Kod: Tümünü seç

create or alter procedure TEST_SP1 (
    TAR1 date,
    TAR2 date,
    ILCE varchar(25))
returns (
    KTUR varchar(30),
    MSAY smallint,
    CSAY smallint,
    DSAY smallint)
as
declare variable TOPMRC smallint;
begin
  for
  select KURUMTUR, SUM(MRCT_SAY),SUM(CKM_SAY),SUM(DOLGU_SAY) from TEST_AD where TARIH>=:tar1 AND TARIH<=:tar2 and KURUMILCE=:ilce GROUP by KURUMTUR
  into :KTUR,:MSAY,:CSAY,:DSAY
  do
   begin
  suspend;
     end
YUKARIDAKİ SP İLE AŞAĞIDAKİ SONUÇLAR DÖNÜYOR
  • CSAY MSAY DSAY KTUR
    83 62 71 K1
    18 15 28 K2
    15 12 18 K3
Burada tam olarak istediğim; hem dönen sorgu sonuçlarını hem de sonuçların toplamını (CSAY alanındaki 83+18+15=116 toplamı gibi) alabilmek. Bu işlemi herhangi bir tanımlama, değişken vb. kullanarak aynı procedurde halledebilirmiyim konusunda yardımcı olmanızı rica ediyorum
smokie
Üye
Mesajlar: 72
Kayıt: 01 Tem 2007 10:26

Re: Firebird Stored Procedure ile dönen output alanlardaki birden fazla satır veriyi toplamak

Mesaj gönderen smokie »

Kod: Tümünü seç

create or alter procedure TEST_SP1 (
    TAR1 date,
    TAR2 date,
    ILCE varchar(25))
returns (
    KTUR varchar(30),
    MSAY smallint,
    CSAY smallint,
    DSAY smallint)
as
declare variable TOPMRC smallint;
begin
  for
  select KURUMTUR, 
  SUM(MRCT_SAY),
  SUM(CKM_SAY),
  SUM(DOLGU_SAY), 
  (CASE WHEN MRCT_SAY> 0 then MRCT_SAY ELSE 0 END) + (CASE WHEN CKM_SAY > 0 then CKM_SAY ELSE 0 END) AS GENEL_TOPLAM 
  from TEST_AD 
  where TARIH>=:tar1 AND TARIH<=:tar2 and KURUMILCE=:ilce 
  
  GROUP by  KURUMTUR
  into :KTUR,:MSAY,:CSAY,:DSAY                                                      
  do
   begin
  suspend;
     end
Cevapla