Fórum Problema com junção de tabelas #385907
09/09/2010
0
Estou fazendo um banco de dados onde possuo uma tabela de Cadastro dos Caminhões(id_caminhao, id_motorista, tipo), uma de Abastecimentos(id_abastecimento, id_caminhao, posto, valor) e outra de Serviços(id_servico, id_caminhao, valor_serv).
Quando faço junção dessas tabelas, por exemplo:
Vou somar os valores em comuns que possuo nessas tabelas, mas quando eu faço a junção, o valor da tabela serviço está vindo duplicado.
Estou usando:[code] select sum(s.valor_ser), sum(a.valor) from caminhao c, abastecimentos a, servicos s where c.id_caminhao = a.id_caminhao and s.id_caminhao = c.id_caminhao [code]
Como abastecimento tem o registro de um caminhão duas vezes, ele consegue fazer a soma e me dar o valor total gasto por aquele caminhão... mas o resultado do serviço aparece duplicado, como se ele tivesse feito isto para cada registro do abastecimento.
Como faço para fazer uma soma em uma tabela e depois fazer junção com outra tabela sem duplicar o dado?
Já tentei todos os tipos de join. Não sei se vou precisar de subquerie.
Agradeço a ajuda.
Obrigada :)
Ludmila Campos
Curtir tópico
+ 0Posts
09/09/2010
Wilson Junior
SELECT SUM( s.Valor_Ser ), SUM( a.Valor ) FROM CAMINHAO c LEFT OUTER JOIN ABASTECIMENTOS a ON (a.ID_Caminhao = c.ID_Caminhao) LEFT OUTER JOIN SERVICOS s ON (s.ID_Caminhao = c.ID_Caminhao)
Espero ter colaborado.
Gostei + 0
09/09/2010
Eriley Barbosa
SUM( s.Valor_Ser ),
SUM( a.Valor )
FROM
CAMINHAO c
LEFT OUTER JOIN ABASTECIMENTOS a ON (a.ID_Caminhao = c.ID_Caminhao)
LEFT OUTER JOIN SERVICOS s ON (s.ID_Caminhao = c.ID_Caminhao) group by c.ID_Caminhao
Gostei + 0
09/09/2010
Ludmila Campos
Gostei + 0
10/09/2010
Wilson Junior
Aguardo retorno.
Gostei + 0
10/09/2010
Eriley Barbosa
c.Tipo_Caminhao, SUM( s.Valor_Ser ),
SUM( a.Valor )
FROM
CAMINHAO c,
ABASTECIMENTOS a, SERVICOS s where a.ID_Caminhao = c.ID_Caminhao
and s.ID_Caminhao = c.ID_Caminhao and a.Id_abastecimento = s.Id_abastecimento and a.ID_Caminhao = s.ID_Caminhao group by c.ID_Caminhao, c.Tipo_Caminhao
Gostei + 0
10/09/2010
Ludmila Campos
A tabela serviço é
Id_servico, id_caminhao e valor_serv
Eu estou utilizando o Mysql Administrator para fazer as tabelas. Os campos de valores já tentei fazer decimal (10,2), do tipo double.. mas o dado do caminhão de ID 3 está alterado.
Como mostra o exemplo anterior, se eu preciso somar os serviços do id 3, então o resultado era para dar 84.87 e está duplicando este valor.
Segue a imagem com o resultado da pesquisa.... fazendo a correção da tabela serviço e olha como ele está duplicando os valores dos resultados... era para dar no id_caminhao SUM_Valor_serv 84.87 e do Valor (abastecimento) 1400.
Já tentei várias queries... separando os selects... funciona.. mas quando tento visualizar tudo em um select... ele está duplicando os dados.
Aguardo retorno....
Obrigada :)
Gostei + 0
10/09/2010
Wilson Junior
SELECT c.ID_Caminhao, ( SELECT SUM( s.Valor_Ser ) FROM SERVICOS s WHERE s.ID_Caminhao = c.ID_Caminhao ) AS ValorServ, ( SELECT SUM( a.Valor ) FROM ABASTECIMENTOS a WHERE a.ID_Caminhao = c.ID_Caminhao ) AS ValorAbast FROM CAMINHAO c
Espero ter colabroado.
Gostei + 0
10/09/2010
Wilson Junior
SELECT c.ID_Caminhao, ( SELECT SUM( s.Valor_Ser ) FROM SERVICOS s WHERE s.ID_Caminhao = c.ID_Caminhao ) AS ValorServ, ( SELECT SUM( a.Valor ) FROM ABASTECIMENTOS a WHERE a.ID_Caminhao = c.ID_Caminhao ) AS ValorAbast FROM CAMINHAO c
Espero ter colaborado.
Gostei + 0
10/09/2010
Ludmila Campos
Muito obrigada Wilson... vc salvou minha vida...rs...rs.rs
[]s,
Até ++
Gostei + 0
29/04/2013
José
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)