Ver Mensaje Individual
  #2  
Antiguo 12-09-2012
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.806
Reputación: 22
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
He traducido tu SQL utilizando JOINs.
Código SQL [-]
Select SUM(dhr.kmrecorrido), SUM(co.consumo), c.nocarro, c.indicecons 
from carro c
join consumo co
on c.idcarro=co.idcarro
join hojaruta hr
on c.idcarro=hr.idcarro
join deschojaruta dhr
on dhr.idhojaruta=hr.idhojaruta
Where 
co.fecha between :binicio and :bfin and
dhr.fecha between :binicio and :bfin
Group By c.nocarro, c.indicecons
Order By c.nocarro
El probelma, me parece, radica en que no tienes unido de ninguna manera el consumo con hojaruta.
En este caso, el SELECT te devolverá todos los elementos de consumo y todos los elementos de hojaruta y todas sus posibles combinaciones.

Si luego de filtrar entre fechas obtienes:
consumo (1, 2, 3)
hojaruta (a, b, c)
El select te devolverá:
(1-a, 1-b, 1-c, 2-a, 2-b, 2-c, 3-1, 3-b, 3-c)

Supongo que la mejor opción, puesto que no hay relación entre consumo y hojaruta es hacer dos SELECTs dentro de uno:

Algo así:
Código SQL [-]
Select c.nocarro, c.indicecons,
(
select SUM(dhr.kmrecorrido) from hojaruta hr
on c.idcarro=hr.idcarro
join deschojaruta dhr
on dhr.idhojaruta=hr.idhojaruta
dhr.fecha between :binicio and :bfin
) as kmrecorrido,
(
select SUM(co.consumo) from consumo co
on c.idcarro=co.idcarro
co.fecha between :binicio and :bfin and
) as consumo
from carro c
Order By c.nocarro
Responder Con Cita