Ajuda select com joins
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:
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!
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
Curtidas 0
Respostas
Isaac Jose
08/10/2015
bom dia.
voce vai precisar pegar o valor do carro e trazer na consulta somente o max(valor) valor.
voce vai precisar pegar o valor do carro e trazer na consulta somente o max(valor) valor.
GOSTEI 0
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.
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
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
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 ?!?
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
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
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
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