Ajuda select com joins

Firebird

08/10/2015

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

Curtidas 0

Respostas

Isaac Jose

Isaac Jose

08/10/2015

bom dia.
voce vai precisar pegar o valor do carro e trazer na consulta somente o max(valor) valor.
GOSTEI 0
Marcos P

Marcos P

08/10/2015

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.
GOSTEI 0
Diogenes Pires

Diogenes Pires

08/10/2015

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]
GOSTEI 0
Marcos P

Marcos P

08/10/2015

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 ?!?
GOSTEI 0
Diogenes Pires

Diogenes Pires

08/10/2015

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]
GOSTEI 0
Diogenes Pires

Diogenes Pires

08/10/2015

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
GOSTEI 0
POSTAR