[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