[firebase-br] Ajuda para um Select Sum

Carlos Midia carlosmidia2013 em gmail.com
Sáb Fev 27 09:52:26 -03 2016


Obrigado a todos pelas ajudas.

Em 25 de fevereiro de 2016 09:16, Gladiston Santana <gladiston em vidy.com.br>
escreveu:

> Olá meu querido,
>
> Existem diversas maneiras de se fazer, uma bate-pronto é o uso das CTEs, um
> jeito elegante de contruir uma querie com resultados em memória, porém o
> que vai retornar será um select(com ou sem agregados) a partir desses
> resultados. Não é muito performático, mas resolve problemas melhor do que
> select usando sum campo por campo como já ví aqui.
> Eu deixei as CTEs um pouco de lado porque há uma forma de construir queries
> de jeito melhor quando o(s) resultado(s) devem ser arbitrados e depois
> somados, chama-se 'execute block', é como uma procedure retornável, porém é
> uma querie como qualquer outra, veja se consegue enxergar um select aqui:
> EXECUTE BLOCK
> RETURNS(id integer,
>         pedido_num integer,
>         cliente varchar(255),
>         data_pedido date,
>         valor_total numeric(18,2),
>         total_geral numeric(18,2))
> as
> declare variable l_fechado varchar(1)='';
> begin
>   total_geral=0.00;
>   for Select p.Id, p.Pedido_Num, p.Cliente, p.Data_Pedido, p.fechado,
> p.Valor_Total
>   from PEDIDO p
>   where p.Data_Pedido between :pDataini and :pDatafim
>   and p.Fechado = :pConfirmada
>   into  :id,
>         :pedido_num,
>         :Cliente,
>         :Data_Pedido,
>         :fechado,
>         :Valor_Total  do
>   begin
>     if (condicao_qualquer) then total_geral=(:total_geral+:Valor_Total);
>     (daqui em diante...resolva qualquer coisa com if...then que resulte em
> somas)
>   end
>   -- suspend retornará uma linha de resultado
>   suspend;
> end;
>
> Se você conseguiu entender a idéia, qualquer select significativo você
> poderá resolver dessa forma.
> Esteja atento que somas que envolvam nulos, os nulos devem ser resolvidos
> (geralmente, coalesce) antes da soma, caso contrário você obterá resultados
> estranhos.
> Outro fator a se levar em conta é a maneira peculiar como por exemplo,
> 1*1,50 não é 3, multiplicações de inteiro por fracionados devem ser
> evitados, use fracionados com fracionados, ex: 1.00*1.50=3.00.
>
> Um abraço e seja feliz.
> ______________________________________________
> 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://www.firebase.com.br/pesquisa_lista.html
>



Mais detalhes sobre a lista de discussão lista