[firebase-br] Ajuda em stored procedure

Eduardo Jedliczka edujed em gmail.com
Seg Maio 30 08:43:29 -03 2011


Sua Lógica está errada...

Você está somando os valores para cada registro da tabela controle_conta.

Refaça o seu for select para algo do tipo:

 FOR

   select Distinct  cc.dt_cadastro
      from

      controle_conta cc

    WHERE

   cc.dt_cadastro between :pdataini and :pdatafim

    and cc.id_empresa = :empresa

    order by cc.dt_cadastro

   INTO :data

     DO

 BEGIN

   select coalesce(sum(cc.valor),0)as margProdTerc from controle_conta cc
where cc.mov   = 'X' and cc.tipo_mov = 'C'
and    cc.dt_cadastro=:data and cc.id_empresa = :empresa
into  :margProdTerc;

    select coalesce(sum(cc.valor),0)as prodTerc     from controle_conta cc
where cc.mov   = 'T' and cc.tipo_mov = 'C'
and    cc.dt_cadastro=:data and cc.id_empresa = :empresa
into :prodTerc;

  select coalesce(sum(cc.valor),0)as Tarifacao    from controle_conta cc
where cc.mov   = 'F' and cc.tipo_mov = 'C' ),
and    cc.dt_cadastro=:data and cc.id_empresa = :empresa
into       :Tarifacao;

  select coalesce(sum(cc.valor),0)as cobraDia     from controle_conta cc
where cc.mov   = 'I' and cc.tipo_mov = 'C' ),
and    cc.dt_cadastro=:data and cc.id_empresa = :empresa
into     :cobraDia;

    select coalesce(sum(cc.valor),0)as cambista     from controle_conta cc
where cc.mov   = 'A' and cc.tipo_mov = 'C' )
and    cc.dt_cadastro=:data and cc.id_empresa = :empresa
into         :cambista;


  SUSPEND;

END



==========================
Eduardo Jedliczka
Apucarana - Pr
==========================



2011/5/29 Jose Luiz de Medeiros <joseluiz em digitoneletronica.com.br>

> Colegas, boa noite.
>
>
>
> Criei um SP para pegar resultados de uma tabela separando por tipo, ela me
> traz as linhas de acordo com a data. Mas os valores se repetem, o que fiz
> de
> errado?
>
>
>
> CREATE PROCEDURE SP_REL_CAIXA (
>
>    pdataini date,
>
>    pdatafim date,
>
>    empresa integer)
>
> returns (
>
>    data date,
>
>    margprodterc numeric(18,2),
>
>    prodterc numeric(18,2),
>
>    tarifacao numeric(18,2),
>
>    cobradia numeric(18,2),
>
>    cambista numeric(18,2)
>
>    )
>
> as
>
> begin
>
>  FOR
>
>    select  cc.dt_cadastro,
>
>     (select coalesce(sum(cc.valor),0)as margProdTerc from controle_conta cc
> where cc.mov   = 'X' and cc.tipo_mov = 'C' ),
>
>     (select coalesce(sum(cc.valor),0)as prodTerc     from controle_conta cc
> where cc.mov   = 'T' and cc.tipo_mov = 'C' ),
>
>     (select coalesce(sum(cc.valor),0)as Tarifacao    from controle_conta cc
> where cc.mov   = 'F' and cc.tipo_mov = 'C' ),
>
>     (select coalesce(sum(cc.valor),0)as cobraDia     from controle_conta cc
> where cc.mov   = 'I' and cc.tipo_mov = 'C' ),
>
>     (select coalesce(sum(cc.valor),0)as cambista     from controle_conta cc
> where cc.mov   = 'A' and cc.tipo_mov = 'C' )
>
>       from
>
>       controle_conta cc
>
>     WHERE
>
>    cc.dt_cadastro between :pdataini and :pdatafim
>
>     and cc.id_empresa = :empresa
>
>     group by cc.dt_cadastro
>
>    INTO :data,
>
>         :margProdTerc,
>
>         :prodTerc,
>
>         :Tarifacao,
>
>         :cobraDia,
>
>         :cambista
>
>          DO
>
>  BEGIN
>
>   SUSPEND;
>
> END
>
>
>
> end
>
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use:
> http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>



Mais detalhes sobre a lista de discussão lista