Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

gilbertojr

Join

Recommended Posts

Olá pessoal, preciso de uma ajuda aqui, é simples porém não estou conseguindo bolar a saída

 

tenho um SQL aqui que me retorna 'quantidade', 'nome', 'valorServico' com as condições:

 

situacao = 6 e pago = 0

 

e está assim:

 

 "SELECT c.cliente, c.id, COUNT(c.id) AS quantidade, "&_
 "SUM((p.valor * p.qtn) + o.valorServico) AS valores "&_
 "FROM tbl_os o "&_
 "JOIN tbl_clientes c ON (o.idCliente = c.id) "&_
 "JOIN tbl_pedidos p ON (o.id = p.os) "&_
 "WHERE o.situacao = 6 AND o.pago = 0 "&_
 "GROUP BY c.cliente "&_
 "ORDER BY c.id ASC")

 

tenho ordens de serviço, essas ordem pode ou não ter pedidos, quando eu busco somente 'situacao = 6 e pago = 0'

 

me retorna ex: 3 'ordens' 2 delas tem pedido e 1 não, mas quando eu chamo a SQL que mostrei ela me retorna somente 2 ordens porque 1 ordem não tem pedido. é isso!

 

Sei que o problema está na linha 5 mas não sei como resolver.

alguém tem alguma ideia?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Na tabela pedidos ao invés de usar Join use Left Join.

 

Dai se não existir o pedido, o p.qtn retorna nulo

 

Então você vai ter que fazer um if na sua soma, ficaria assim:

 

"SELECT c.cliente, c.id, COUNT(c.id) AS quantidade, "&_
 "SUM((p.valor * IF(p.qtn is null, 0, p.qtn)) + o.valorServico) AS valores "&_
 "FROM tbl_os o "&_
 "JOIN tbl_clientes c ON (o.idCliente = c.id) "&_
 "LEFT JOIN tbl_pedidos p ON (o.id = p.os) "&_
 "WHERE o.situacao = 6 AND o.pago = 0 "&_
 "GROUP BY c.cliente "&_
 "ORDER BY c.id ASC")

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.