DevMedia

Ajuda com query.

0
Boa Noite,

Pessoal estou com o seguinte problema e preciso de um help.

Estou tentando criar um query doida varrida, bom meu problema e o seguinte:

Tenho 5 tabelas:

TAB1 = TAB_PRODUTOS
ID
DESCRICAO
VALOR
1
PLACA MAE
135,00


TAB2 = TAB_ENTRADAPRODNF
ID
IDPROD
QTDA
1
1
3

TAB3 = TAB_ENTRADAPROD
ID
IDPROD
QTDA
1
1
0

TAB3 = TAB_SAIDAPROD
ID
IDPROD
QTDA
1
1
5

TAB4 = TAB_SAIDAPRODNF
ID
IDPROD
QTDA
null
null
null


Quero que minha query some as "qtda" da TAB2 + TAB3 e subtraia as "QTDA" da TAB3 - TAB4

Assim me informando o total geral.
Otimo ate ai tudo bem ele soma e subtrai e me mostra o resultado, mas com um porem se uma das tabelas nao tiver o valor ele não faz o sum.

Estou utilizando essa query para gerar essa regra mas sem futuro.

#Código
select
  tab1.id,
  tab1.descricao,
  tab1.preco_venda,
  tab2.quantidade,
  tab3.quantidade,
  tab4.quantidade,
  tab5.quantidade,
  sum((tab2.quantidade)+(tab4.quantidade)+(tab3.quantidade)+(tab5.quantidade))
  from tab_produtos TAB1
  left join tab_entradaprod tab2 ON tab1.id = tab2.idprod
  left join tab_saidaprod tab3 on tab1.id = tab3.idprod
  left join tab_entradaprodnf tab4 on tab1.id = tab4.idprod
  left join tab_saidaprodnf tab5 on tab1.id = tab5.idprod
  where tab1.descricao like 'PLACA%'
  group by
      tab1.id,
      tab1.descricao,
      tab1.preco_venda,
      tab2.quantidade,
      tab3.quantidade,
      tab4.quantidade,
      tab5.quantidade


Alguem teria uma luz para me dar .

[]´s
Publicidade

Respostas (5)

0
Boa Noite,

Resolvido.

Utilizei da seguinte forma:

#Código
select
  tab1.id,
  tab1.descricao,
  tab1.preco_venda,
  tab2.quantidade,
  tab3.quantidade,
  tab4.quantidade,
  tab5.quantidade,
  sum((COALESCE(tab2.quantidade,0))+(COALESCE(tab4.quantidade,0))-(COALESCE(tab3.quantidade,0))+(COALESCE(tab5.quantidade,0)))
  from tab_produtos TAB1
  left join tab_entradaprod tab2 ON tab1.id = tab2.idprod
  left join tab_saidaprod tab3 on tab1.id = tab3.idprod
  left join tab_entradaprodnf tab4 on tab1.id = tab4.idprod
  left join tab_saidaprodnf tab5 on tab1.id = tab5.idprod
  where tab1.descricao like 'PLACA%'
  group by
      tab1.id,
      tab1.descricao,
      tab1.preco_venda,
      tab2.quantidade,
      tab3.quantidade,
      tab4.quantidade,
      tab5.quantidade



[]´s
0
Ops Ops...Ainda estava com erro:
Agora a query correta.


#Código
select
  tab1.id,
  tab1.descricao,
  tab1.preco_venda,
  (select (sum (quantidade)) from tab_entradaprod),
  (select (sum (quantidade)) from tab_entradaprodnf),
  (select (sum (quantidade)) from tab_saidaprod),
  (select (sum (quantidade)) from tab_saidaprodnf),
  sum((select (sum (quantidade)) from tab_entradaprod)+((select (sum (quantidade)) from tab_entradaprodnf))-
      ((select (sum (quantidade)) from tab_saidaprod))-((select (sum (quantidade)) from tab_saidaprodnf)))
  from tab_produtos TAB1
  where tab1.descricao like 'PLACA%'
  group by
      tab1.id,
      tab1.descricao,
      tab1.preco_venda


[]s
0
Beleza garoto!, ajudou mais um hoje.. abracos
0

Citação:
Ops Ops...Ainda estava com erro:
Agora a query correta.


#Código
select
  tab1.id,
  tab1.descricao,
  tab1.preco_venda,
  (select (sum (quantidade)) from tab_entradaprod),
  (select (sum (quantidade)) from tab_entradaprodnf),
  (select (sum (quantidade)) from tab_saidaprod),
  (select (sum (quantidade)) from tab_saidaprodnf),
  sum((select (sum (quantidade)) from tab_entradaprod)+((select (sum (quantidade)) from tab_entradaprodnf))-
      ((select (sum (quantidade)) from tab_saidaprod))-((select (sum (quantidade)) from tab_saidaprodnf)))
  from tab_produtos TAB1
  where tab1.descricao like 'PLACA%'
  group by
      tab1.id,
      tab1.descricao,
      tab1.preco_venda


[]s


esta query está correta??? onde, nas subselects, você está relacionando o produto?

creio que o correto seja:

select
  tab1.id,
  tab1.descricao,
  tab1.preco_venda,

  (select coalesce(sum(ep.quantidade),0) from tab_entradaprod ep where ep.idprod = tab1.id) qtdentrada,
  (select coalesce(sum(enf.quantidade),0) from tab_entradaprodnf enf where enf.idprod = tab1.id) qtdentradanf,
  (select coalesce(sum(sp.quantidade),0) from tab_saidaprod sp where sp.idprod = tab1.id) qtdsaida,
  (select coalesce(sum(snf.quantidade),0) from tab_saidaprodnf snf where snf.idprod = tab1.id) qtdsaidanf,

  (select coalesce(sum(ep.quantidade),0) from tab_entradaprod ep where ep.idprod = tab1.id)+
  (select coalesce(sum(enf.quantidade),0) from tab_entradaprodnf enf where enf.idprod = tab1.id)-
  (select coalesce(sum(sp.quantidade),0) from tab_saidaprod sp where sp.idprod = tab1.id)-
  (select coalesce(sum(snf.quantidade),0) from tab_saidaprodnf snf where snf.idprod = tab1.id) total
from
  tab_produtos TAB1
where
  tab1.descricao like 'PLACA%'
group by
  tab1.id,
  tab1.descricao,
  tab1.preco_venda

veja se é isso mesmo ou se eu estou falando bobagem...
0
Realmente sua query ta faltando os joins, faça como o Emerson mostrou