Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Consulta confusa (https://www.clubdelphi.com/foros/showthread.php?t=80997)

LuisAlf:: 30-09-2012 23:47:44

Consulta confusa
 
Hola a todos los programadores!...

Disculpenme si no es correcto el titulo de mi hilo, pero no supe como ponerle...

Tengo un problema con una consulta que no me quiere salir...
Les planteo mi situación:

Tengo una BD hecha en Access...

Uso una tabla llamada "HistorialManifiestos" en la cual tengo los campos: "destino", "material","cantidad","fecha" (solo muestro los campos pertinentes a mi consulta)
El proceso involucrado es que se almacena a la tabla todo el material que se embarca junto con la cantidad, el destino y la fecha en que salio.

Tengo un query en access llamado: "sins" que lo uso como una tabla, en el tengo los campos "material" y "valor".

En resumen... con estas dos "tablas" realizo una consulta que me hace una operacion... para obtener un resultado agrupado por destino...

Código SQL [-]
SELECT destino, Sum(cantidad*valor/100) AS HORAS,
    FROM HistorialManifiestos, sins
       WHERE HistorialManifiestos.material=sins.material
          GROUP BY destino;

Todo bien hasta aquí... pero ahora lo que me piden es que obtenga la suma de los dias que se embarcaron por destino
(aqui lo que hice es hacer una consulta con un distinct a las fechas(se repiten registros con la misma fecha) y despues un count:
Código SQL [-]
SELECT destino, count (*) AS dias
   FROM (SELECT DISTINCT (fecha), destino
               FROM HistorialManifiestos
                  GROUP BY destino, fecha)
     GROUP BY destino;
) para dividir las "HORAS" (primera consulta) entre los dias (segunda consulta) y agrupar el resultado por destino. Pero no se como ligar estas dos consultas... :confused:

O alguien con más experiencia tiene una mejor idea de hacer esto porque a mi no me da para mas...

Espero haberme explicado y porfavor que alguien me ayude!

Gracias por su tiempo!

PD. Estas consultas las estuve probando en Access... para despues hacerlas en Delphi.

Young 01-10-2012 04:10:16

Hola Luis, en primer lugar las consultas las haría de otra manera, bueno la verdad es cosa de cada uno:

Código SQL [-]
SELECT HistorialManifiestos.destino, SUM(HistorialManifiestos.valor * sins.valor / 100) AS HORAS
FROM HistorialManifiestos
INNER JOIN sins ON (HistorialManifiestos.material = sins.material)
GROUP BY HistorialManifiestos.destino;

Me parace que la segunda consulta es más sencilla de lo que crees (puedo estar equivocado en mi aproximación)
Código SQL [-]
SELECT HistorialManifiestos.destino, count(HistorialManifiestos.fecha)
FROM HistorialManifiestos
GROUP BY HistorialManifiestos.destino;

Ahora para solucionar tu problema, te propondría hacer un procedimiento almacenado seleccionable, esto quiere decir que pueda devolver valores como en una tabla, por lo tanto usarlo con un select. Entonces con estas dos consultas recolectas los datos y los armas en el procedimiento.

Edito: Oops! veo que tu db es en access y hasta donde yo sé no existen los procedimientos almacenados.

Espero que te oriente un poco.

LuisAlf:: 01-10-2012 06:12:27

Hola Young, la razon por la que tengo la segunda consulta asi es porque puede existir mas de un registro con el mismo destino y la misma fecha por eso utilizo el distinct primero y despues aplico un count... lo quise intentar asi: count(distinct(fecha)) pero no funcionó.

La verdad ya he intentado combinar las consultas pero no puedo... no se como plantear la union... he intentado hacer algo asi pero me salen errores:
Código SQL [-]
SELECT Sum(quantity*pp/100)/dias in(segunda consulta)


La verdad ya no se como proceder... :confused:

Young 01-10-2012 16:00:54

Sabes aún no termino de entender bien, pero si lo que quieres es los embarques por destinos y por días lo haría así:

Código SQL [-]
SELECT HistorialManifiestos.destino, HistorialManifiestos.fecha, count(HistorialManifiestos.fecha)
FROM HistorialManifiestos
GROUP BY HistorialManifiestos.destino, HistorialManifiestos.fecha
ORDER BY HistorialManifiestos.destino, HistorialManifiestos.fecha;

Suerte.


La franja horaria es GMT +2. Ahora son las 19:45:14.

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