SQL DE RESPEITO

USUARIO.EXCLUIDOS 12/05/2004 16:50:24
#24344
Galera tenho um relatório que recebe a soma de todos os gastos com tudo durante o mes, só que quando vou pedir pra imprimir o relatório e alguma coisa não teve gastos no mes, por exemplo, não foi gasto nada com pneus, o relatorio nao é exibido, mesmo que os outros gastos existam...ou seja um campo vazio "anula" os outros...como posso resolver isso atraves da sql abaixo?? valeu ae galera..


SQL = "SELECT Sum(Combustivel.LtsDiesel) AS SomaDeLtsDiesel, Sum(Combustivel.ValorPagoDiesel) AS SomaDeValorPagoDiesel, Sum(Combustivel.LtsGasolina) AS SomaDeLtsGasolina, Sum(Combustivel.ValorPagoGasolina) AS SomaDeValorPagoGasolina, Sum(Combustivel.LtsAlcool) AS SomaDeLtsAlcool, Sum(Combustivel.LtsPagoAlcool) AS SomaDeLtsPagoAlcool, Sum(Combustivel.MtsGas) AS SomaDeMtsGas, Sum(Combustivel.ValorGas) AS SomaDeValorGas, Sum(Lubrificante.OleoMotorLts) AS SomaDeOleoMotorLts, Sum(Lubrificante.[OleoMotorR$]) AS [SomaDeOleoMotorR$], Sum(Lubrificante.OleoCxMudancaLts) AS SomaDeOleoCxMudancaLts, Sum(Lubrificante.[OleoCxMudancaR$]) AS [SomaDeOleoCxMudancaR$], Sum(Lubrificante.OleoDiferencialLts) AS SomaDeOleoDiferencialLts, Sum(Lubrificante.[OleoDiferencialR$]) AS [SomaDeOleoDiferencialR$], Sum(Lubrificante.OleoFreioLts) AS SomaDeOleoFreioLts, Sum(Lubrificante.[OleoFreioR$]) AS [SomaDeOleoFreioR$], Sum([ValorPagoPecas]+[ValorPagoPecas1]+[ValorPagoPecas2]+[ValorPagoPecas3]) AS DespManutencao, " & _
"Sum(Pneus.ValorUnitario) AS SomaDeValorUnitario, Sum(Pneus.ValorUnit) AS SomaDeValorUnit FROM Lubrificante, Manut, Pneus, Veiculo INNER JOIN Combustivel ON Veiculo.PlacaVeiculo = Combustivel.Placa GROUP BY Month(Combustivel.Data), Year(Combustivel.Data), Month(Lubrificante.Data), Year(Lubrificante.Data), Month(Manut.Data), Year(Manut.Data), Month(Pneus.Data), Year(Pneus.Data) HAVING (((Month(Combustivel.Data))='" & txtMes.Text & "') AND ((Year(Combustivel.Data))='" & cboAno.Text & "') AND ((Month(Lubrificante.Data))='" & txtMes.Text & "') AND ((Year(Lubrificante.Data))='" & cboAno.Text & "') AND ((Month(Manut.Data))='" & txtMes.Text & "') AND ((Year(Manut.Data))='" & cboAno.Text & "') AND ((Month(Pneus.Data))='" & txtMes.Text & "') AND ((Year(Pneus.Data))='" & cboAno.Text & "'))"[txt-color=red][/txt-color]
USUARIO.EXCLUIDOS 12/05/2004 20:59:35
#24374
Resposta escolhida
Rodrigo, creio que sera um tanto dificil você obter ajuda, pois você não tem uma dúvida você tem um problema espefico (alias um pepino) !

O que posso dizer é o seguinte;
A clausula FROM parece estar meio "solta" pois você tem um JOIN com 5 tabelas no entanto somente "combustivel" e "Veiculo" constam no INNER.
FROM Lubrificante, Manut, Pneus, Veiculo INNER JOIN Combustivel ON Veiculo.PlacaVeiculo = Combustivel.Placa
Isso pode ocasionar o chamado produto cartesiano. onde para cada registro da tabela A serão selecionados todos os registros da tabela B !

E de mais a mais esse é o funcionamento de JOINs o registro só sera exibido se o mesmo existir nas tabelas relacionadas nesse JOIN.

O seu problema esta na modelagem de dados. As tabelas Lubrificante, Manut, Pneus e Combustivel poderiam ser uma unica tabela (Manutenção ou Custos) onde cada registro poderia ter uma identificação a que o custo se refere (lubrificantes, lavagem, pneus, oficina, manutenção preventiva, combustiveis, etc).
Tópico encerrado , respostas não são mais permitidas