Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 12-09-2012
Salnhack Salnhack is offline
Miembro
NULL
 
Registrado: oct 2011
Ubicación: Cuba
Posts: 71
Poder: 13
Salnhack Va por buen camino
Unhappy Ayuda con consulta

Hola a todos
escribo para ver quien me puede ayudar

tengo 4 tablas

carro
idcarro nocarro indicecons
1 TSA-590 10
2 TSA-250 20

hojaruta
idhojaruta idcarro nohojatuta chofer
1 1 150 Juan
2 2 151 Pedro

deschojaruta
iddeschojaruta idhojaruta origen destino kmrecorrido fecha
1 1 Las Tunas Holguin 74 1/09/2012
2 1 Holguin Las Tunas 74 1/09/2012
3 2 Las Tunas Santuago 204 2/09/2012

consumo
idconsumo idcarro consumo chip fecha
1 1 10 150 1/09/2012
2 2 50 12 1/09/2012
3 1 10 20 2/09/2012
4 2 10 25 2/09/2012
5 2 40 50 3/09/2012


necesito hacer una consulta que me selecione por carro los km recorrido y el consumo en un rango de fecha 1/9/2012-30/9/2012
algo asi

carro indicecons kmrecorrido consumo

TSA-590 10 148 20

TSA-250 20 204 100
este es el resultado que me deveria dar

y estoy utilizando esta consulta
Código Delphi [-]
     SQL.Add('Select SUM(deschojaruta.kmrecorrido),SUM(consumo.consumo), carro.nocarro, carro.indicecons from deschojaruta,carro, hojaruta, consumo');
     SQl.Add('Where deschojaruta.fecha between :binicio and :bfin and deschojaruta.idhojaruta=hojaruta.idhojaruta and hojaruta.idcarro=carro.idcarro and consumo.fecha between :binicio and :bfin and carro.idcarro=consumo.idcarro');
     SQL.Add('Group By carro.nocarro, carro.indicecons');
     SQL.Add('Order By carro.nocarro');
pero me devuelve los resultados incorrectamente
Responder Con Cita
  #2  
Antiguo 12-09-2012
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.738
Poder: 20
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
  #3  
Antiguo 13-09-2012
Salnhack Salnhack is offline
Miembro
NULL
 
Registrado: oct 2011
Ubicación: Cuba
Posts: 71
Poder: 13
Salnhack Va por buen camino
hola duilioisola
he probado el codigo que me sugeriste pero me da error en sintaxis
Responder Con Cita
  #4  
Antiguo 13-09-2012
hoyosfelix hoyosfelix is offline
Miembro
 
Registrado: ago 2010
Ubicación: San Antonio, Paraguay
Posts: 38
Poder: 0
hoyosfelix Va por buen camino
Respuesta "Ayuda con consulta"

Buen día Salnhack, te paso un select para probar

SELECT C.IDCARRO, C.NOCARRO, C.INDICECONS, SUM(DHR.KMRECORRIDO), SUM(CO.CONSUMO)
FROM CARRO C INNER JOIN HOJARUTA HR ON HR.IDCARRO = C.IDCARRO
INNER JOIN DESCHOJARUTA DHR ON DHR.IDHOJARUTA = HR.IDHOJARUTA
INNER JOIN CONSUMO CO ON CO.IDCARRO = C.IDCARRO
WHERE CO.FECHA BETWEEN :FECHA1 AND :FECHA2
GROUP BY C.IDCARRO, C.NOCARRO, C.INDICECONS
ORDER BY C.IDCARRO


Saludos...

Última edición por hoyosfelix fecha: 13-09-2012 a las 18:10:13.
Responder Con Cita
  #5  
Antiguo 13-09-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.079
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por hoyosfelix Ver Mensaje
...
Recuerda poner los tags al código fuente, ejemplo:



Y te ahorras todo el trabajo que has hecho poniendo colores por palabras, tipos de letras, etc.

Gracias
Responder Con Cita
  #6  
Antiguo 13-09-2012
hoyosfelix hoyosfelix is offline
Miembro
 
Registrado: ago 2010
Ubicación: San Antonio, Paraguay
Posts: 38
Poder: 0
hoyosfelix Va por buen camino
Respuesta "Ayuda con consulta"

Buena tarde,
Gracias por el consejo.
Realmente, intenté resaltar la sintaxis de SQL, pero no entendía muy bien cómo funcionaba, ahora me quedó claro.
En la próxima entrada voy a utilizar correctamente los tag's.
Saludos.
Responder Con Cita
  #7  
Antiguo 13-09-2012
Salnhack Salnhack is offline
Miembro
NULL
 
Registrado: oct 2011
Ubicación: Cuba
Posts: 71
Poder: 13
Salnhack Va por buen camino
Cita:
Empezado por hoyosfelix Ver Mensaje
Buen día Salnhack, te paso un select para probar

SELECT C.IDCARRO, C.NOCARRO, C.INDICECONS, SUM(DHR.KMRECORRIDO), SUM(CO.CONSUMO)
FROM CARRO C INNER JOIN HOJARUTA HR ON HR.IDCARRO = C.IDCARRO
INNER JOIN DESCHOJARUTA DHR ON DHR.IDHOJARUTA = HR.IDHOJARUTA
INNER JOIN CONSUMO CO ON CO.IDCARRO = C.IDCARRO
WHERE CO.FECHA BETWEEN :FECHA1 AND :FECHA2
GROUP BY C.IDCARRO, C.NOCARRO, C.INDICECONS
ORDER BY C.IDCARRO


Saludos...
Hola hoyofelix he probado tu codigo pero me da error en sintaxis falta operador
tengo poco conocimiento de SQL solo lo basico por eso me resulta dificil lograr el resultado que espero
Responder Con Cita
  #8  
Antiguo 13-09-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.079
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por Salnhack Ver Mensaje
Hola hoyofelix he probado tu codigo pero me da error en sintaxis falta operador
tengo poco conocimiento de SQL solo lo basico por eso me resulta dificil lograr el resultado que espero
Ayuda a que te ayudemos
Se parará en una línea, indicará algo más, el mensaje completo y exacto dirá otra cosa, pégalo aquí... no somos adivinos
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Ayuda con consulta SQL n03l SQL 4 18-04-2007 22:03:40
Ayuda con consulta raco Varios 6 06-04-2005 02:14:25
Ayuda con consulta SQL tgsistemas SQL 9 18-02-2004 16:14:07
Ayuda con consulta JorgeBec SQL 7 21-10-2003 20:25:16
ayuda en consulta bismarito Firebird e Interbase 1 29-07-2003 00:40:45


La franja horaria es GMT +2. Ahora son las 23:52:36.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi