Jump to content
Fórum Script Brasil

Question

boa tarde

senhores, estou com a seguinte situação preciso calcular media do preço unitario mais o valor so sai correto se eu colocar o group by mais preciso dos 2 valores em um comando so atualmente so consigo separado

select (avg(case when operacao='V' then l.preco_unit else NULL end) - avg(case when operacao='E'then l.preco_unit else NULL end) ) as lucro_preco,((avg(case when operacao='V' then l.preco_unit else NULL end) - avg(custo_medio_empresa_f(l.empresa,l.produto,($data_ini::date -1))))*sum(case when operacao='V' then l.quantidade else null end) ) from lancto l join produto p on (p.grid=l.produto) join pessoa e on (e.grid=l.empresa) where tipo='='C" group p.nome;

select (avg(case when operacao='V' then l.preco_unit else NULL end) - avg(case when operacao='E'then l.preco_unit else NULL end) ) as lucro_preco,((avg(case when operacao='V' then l.preco_unit else NULL end) - avg(custo_medio_empresa_f(l.empresa,l.produto,($data_ini::date -1))))*sum(case when operacao='V' then l.quantidade else null end) ) from lancto l join produto p on (p.grid=l.produto) join pessoa e on (e.grid=l.empresa) where tipo='='C" group by p.grupo;

se eu não colocar o group by o valor sair incorreto pois ele pega de todos produtos e preciso desse 2 resultado em um comando so não sei se criando uma tabela temp poderia ajuda nesse sentindo pois nunca utilizei esse ferramenta.

Não sei se expliquei bem.

Link to post
Share on other sites

6 answers to this question

Recommended Posts

  • 0

Cara, se você ta somando, você tem q usar group by

Deixa te dar uma dica, quando postar codigo aqui use as tags pra codigo, e se possivel identa o sql pra ficar mais facil de ler,

tenta colocar um union all entre as consultas e deve trazer os 2 dados q você precisa

select (avg(case when operacao='V'  then l.preco_unit else NULL end) - avg(case when operacao='E'then l.preco_unit else NULL end) ) as lucro_preco,((avg(case when operacao='V'  then l.preco_unit else NULL end) - avg(custo_medio_empresa_f(l.empresa,l.produto,($data_ini::date -1))))*sum(case when operacao='V'  then l.quantidade else null end) ) from lancto l join produto p on (p.grid=l.produto) join pessoa e on (e.grid=l.empresa) where tipo='='C" group p.nome
union all
select (avg(case when operacao='V'  then l.preco_unit else NULL end) - avg(case when operacao='E'then l.preco_unit else NULL end) ) as lucro_preco,((avg(case when operacao='V'  then l.preco_unit else NULL end) - avg(custo_medio_empresa_f(l.empresa,l.produto,($data_ini::date -1))))*sum(case when operacao='V'  then l.quantidade else null end) ) from lancto l join produto p on (p.grid=l.produto) join pessoa e on (e.grid=l.empresa) where tipo='='C" group by p.grupo;

Se der certo avisa. eu não li o comando porque alem de grande, ta dificil de ler porque n ta identado, mas o union em tese resolveria.

boa sorte

Edited by Dr. House
Link to post
Share on other sites
  • 0

identar cara é arrumar o codigo.

select
  (avg(case 
    when operacao='V'  then l.preco_unit 
    else NULL 
  end) - avg(case 
    when operacao='E'then l.preco_unit 
    else NULL 
  end) ) as lucro_preco,
  ((avg(case 
    when operacao='V'  then l.preco_unit 
    else NULL 
  end) - avg(custo_medio_empresa_f(l.empresa,
  l.produto,
  ($data_ini::date -1))))*sum(case 
    when operacao='V'  then l.quantidade 
    else null 
  end) ) 
from
  lancto l 
join produto p on (p.grid=l.produto) 
join pessoa e on (e.grid=l.empresa) 
where
  tipo='C'
group 
  p.nome
Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      148902
    • Total Posts
      644991
×
×
  • Create New...