Fórum Ajuda select com joins #533918

08/10/2015

0

Olá pessoal,

Estou com uma dúvida, tenho um problema onde tenho que modelar uma consulta que mostre o quantitativo de cliente de uma concessionária, conforme o modelo do carro, que é exatamente o que o select abaixo está fazendo:

SELECT 
  COUNT(ATENDIMENTO.CODIGO) AS QUANTITATIVO,
  CARRO.MODELO,
  COUNT(CLIENTE.CODIGO) AS CLIENTE
FROM
  ENCAMINHAMENTO
  RIGHT OUTER JOIN ATENDIMENTO ON (ENCAMINHAMENTO.CODIGO = ATENDIMENTO.CODIGO)
  LEFT OUTER JOIN CLIENTE ON (ATENDIMENTO.CODIGO = CLIENTE.CODIGO)
  RIGHT OUTER JOIN CARRO ON (ENCAMINHAMENTO.FKCARROFK = CARRO.CODIGO)
GROUP BY
  CARRO.MODELO


O problema é que na contagem ele deve contar um cliente somente uma vez e o cliente deve ser contado conforme o modelo mais caro. por exemplo se o cliente tem uma Mercedes, uma Hilux, e um Uno, eu não vou contar ele 3 vezes, mais somente uma vez e no grupo da mercedes. SE o cliente tiver 10 carros, eu vou contar ele somente uma vez, no modelo do carro mais carro que ele possui.

Se alguém puder ajudar valeu!
Diogenes Pires

Diogenes Pires

Responder

Posts

08/10/2015

Isaac Jose

bom dia.
voce vai precisar pegar o valor do carro e trazer na consulta somente o max(valor) valor.
Responder

Gostei + 0

08/10/2015

Marcos P

Sem a estrutura de dados fica difícil ajudar...

Faz o seguinte... vai no Fiddle cria tua estrutura de dados lá e coloca alguns registros para teste.
( pode ser MySql ou Sql Server, mesmo... )

Depois, avisa aqui que te ajudo com a query.
Responder

Gostei + 0

08/10/2015

Diogenes Pires

Marcos conforme você me disse criei um link lá no FIDDLE. São 4 tabelas que seguem aquela lógica da explicação, um cliente com três carros, três atendimentos e três encaminhamentos para a manutenção mais na hora da contagem deve ser contado apenas uma vez, a tabela de carros não tem a coluna de preço pois os carros na tabela estão em ordem decrescente de valor. Segue o link [url]http://sqlfiddle.com/#!9/b46c3/1[/url]
Responder

Gostei + 0

08/10/2015

Marcos P

Suas chaves de relacionamento estão erradas na query !

Por exemplo : um JOIN entre (ATENDIMENTO.CODIGO = CLIENTE.CODIGO) jamais vai funcionar pois ambos são AUTO_INCREMENT nas suas tabelas de origem...

"CODIGO" é uma chave genérica que tem o mesmo nome em todas as tabelas, mas representam ligações diversas nos relacionamentos...

Outro problema, o uso indistinto de RIGHT e LEFT JOIN pode indicar que você está perdido em relação ao uso correto das chaves nos relacionamentos.

Revise a estrutura e os relacionamentos, garantindo que as chaves estrangeiras apontem para as chaves primárias corretas !

Por exemplo : (ATENDIMENTO.CODIGO = CLIENTE.CODIGO) deve ser trocado por (ATENDIMENTO.CLIENTEFK = CLIENTE.CODIGO).

Se precisar de ajuda, ponha teu skype aqui que eu te chamo quando tiver um tempo.

Ok ?!?
Responder

Gostei + 0

10/10/2015

Diogenes Pires

Marcos, blz, fiz as alterações que você falou para amarrar as chaves estrangeiras, as uniões com RIGHT e LEFT JOIN, acredito serem necessárias por causa das outras tabelas do banco e na recuperação de dados, mas se for necessário eu posso mudar. Só a questão de como agrupar os clientes que já possuem carros numa única categoria, que ainda não tive uma ideia de como fazer isso, deixo o link do código [url]http://sqlfiddle.com/#!9/9efbd/1[/url]
Responder

Gostei + 0

16/10/2015

Diogenes Pires

Mascos blz?
Ainda não consegui resolver aquele problema preciso de uma ideia de como essa consulta vai buscar os carros removendo os repetidos. Meu Skype diogenes.ermeson
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar