Duvida Procedure para Somar o Total por Forma de Pagamento

Firebird

25/01/2012

Galera estou criando uma procedure para somar o total do caixa por forma de pagamento

ex: Forma de Pagamento | Credito | Debito
Dinheiro 100,00 20,00
Cheque a Vista 0,00 0,00
Cartão 200,00 0,00


A procedure que esta abaixo está calculando corretamente, o problema é que só aparece a primeira forma de pagamento

CREATE PROCEDURE sp_caixa_total (
    datamov date)
returns (
    FormaPgto varchar(45),
    TotalCredito numeric(18,2),
    TotalDebito numeric(18,2))
as
declare variable credito numeric(18,2);
declare variable debito numeric(18,2);
declare variable Forma varchar(45);
BEGIN
    for
    select
        vw_caixa.fpgto_descricao
    from
        vw_caixa
    where
      cast(vw_caixa.data_cad as date) =  :DataMov
    into :FormaPgto
    do
    FOR
    select
        /*(+)  ||*/ vw_caixa.fpgto_descricao ,
        coalesce(sum(vw_caixa.cx_valor_pago),0)
    from
        vw_caixa
    where
      vw_caixa.cx_operacao = (+) CREDITO and
      cast(vw_caixa.data_cad as date) =  :DataMov
      group by vw_caixa.fpgto_descricao
    
   INTO :Forma,
        :TotalCredito
    DO
 /* BEGIN
    SUSPEND;
  END  */
  for
    select
        /*(--)  ||*/ vw_caixa.fpgto_descricao ,
        coalesce(sum(vw_caixa.cx_valor_pago),0)
    from
        vw_caixa
    where
      vw_caixa.cx_operacao = (--) DEBITO and
      cast(vw_caixa.data_cad as date) =  :DataMov
      group by vw_caixa.fpgto_descricao
    INTO :Forma,
         :TotalDebito
  DO
    credito = 0;
    debito = 0;
  BEGIN

    if (Forma  = :FormaPgto) then
        credito = :TotalCredito;
    else
        debito = TotalDebito;

    SUSPEND;
  END
END
Sidney Abreu

Sidney Abreu

Curtidas 0

Respostas

Emerson Nascimento

Emerson Nascimento

25/01/2012

nem é preciso criar uma stored procedure.

creio que uma instrução simples resolva seu problema:

select
○ fpgto_descricao tipopagto,
○ sum(case when cx_operacao = CREDITO then vw_caixa.cx_valor_pago else 0 end) credito,
○ sum(case when cx_operacao = DEBITO then vw_caixa.cx_valor_pago else 0 end) debito
from
○ vw_caixa
where
○ cast(data_cad as date) = :DataMov
group by
○ fpgto_descricao


GOSTEI 0
Emerson Nascimento

Emerson Nascimento

25/01/2012

nem é preciso criar uma stored procedure.

creio que uma instrução simples resolva o seu problema:

select
fpgto_descricao tipopagto,
sum(case when cx_operacao = CREDITO then vw_caixa.cx_valor_pago else 0 end) credito,
sum(case when cx_operacao = DEBITO then vw_caixa.cx_valor_pago else 0 end) debito
from
vw_caixa
where
cast(data_cad as date) = :DataMov
group by
fpgto_descricao
GOSTEI 0
Sidney Abreu

Sidney Abreu

25/01/2012

Show de bola, valeu amigo
GOSTEI 0
POSTAR