consulta para resumen mensual
Tengo una tabla de Recepcion que recoge el material que entra a diario.
Necesito hacer un informe resumen que contenga las entradas desde el dia 1 hasta el dia 31 de cada mes, de tal forma que ponga la suma de las entradas de material de cada dia y 0 los dias que no entre nada (por ejemplo, los domingos) Me he creado una tabla auxiliar llamada DIAS en la que incluyo 31 registros, desde el 1 hasta el 31 Hago la siguiente consulta (la he simplificado un poco para que aparezcan sólo los datos para el mes 12)
Y el resultado que obtengo es sólo para los días en que he tenido Recepción de mercancia :( |
mm que tal si pruebas haciendo la consulta de otra manera
captutra los datos de la tabla auxiliar DIAS y relacionala mediante el letf join con la tabla Recepcion OJO... he colocado campos... que no tienen relacion directa con tu ejemplo... prueba y nos comentas |
No acabo de entender lo que me dices. :confused:
Si entiendo bien lo que me dices es justo lo que he hecho pero no me funciona. Ten en cuenta, que cada dia tengo muchas entradas, por tanto lo primero que tengo que hacer es sumar las entradas diarias. Por eso, del campo fecha extraigo el dia y el mes al que pertenece la entrada y lo sumo Un saludo |
Además, lo que no entiendo es que si pongo left join, el resultado me debería incluir todos los regirstros de la tabla situada a la izquierda ¿o no?
Un saludo |
He probado lo siguiente
y el resultado es exactamente el mismo. Por cierto la bbdd es Firebird 2.1 |
A ver
acabo de hacer una prueba he creado 2 tablas 1 llamada DIA que contiene la fechas del 1 al 31 y la otra llamada consumo que contiene los kilos consumidos por dia
en la tabla consumo existe esta informacion [quote] consumo.......... Dia......................kilos 01/01/2011..........10 01/01/2011.........20 05/01/2011........6 cuando ejecuto el query lo que hace es... de la tabla DIA mostrara todos los dias del 1 al 31 y tambien agrupara todas las sumas de la tabla consumo que sean del mismo dia eso quiere decir que en el dia : 01/01/2011 acumulara 30 02/01/2011 acumulara 0 03/01/2011 acumulara 0 04/01/2011 acumulara 0 05/01/2011 acumulara 6 ...... ...... ...... no es eso lo que quieres? que muestre o (Cero) cuando no haya consumo? |
Cita:
|
Lo que quiero hacer es exactamente lo que indicas en tu ejemplo.
¿Lo has conseguido? ¿Con que consulta? :o |
si lo que quieres es saber el total por día de un campo de una tabla creo que bastaría así y al final te da el total del mes, sin tener que crear ninguna tabla adicional, esto funciona con SQL Server, pero espero te de una idea si no funciona con FireBird
Suerte
|
asi es...
la diferencia es que tu consulta le muestra la informacion en columnas... y la de mas arriba se la muestra en filas.... |
He probado la solución de santi33a y el resultado es el mismo que el mio
Quedaría así
Y al igual que en mi consulta, los días en que no se ha recibido mercancia, no aparece. Por lo que el problema no es que la consulta esté mal formulada, sino que cuando el resultado es NULL, no se evalua y no da ningún resultado El problema es que no se como resolverlo Un saludo |
con que base de datos estas trabajando?
|
Exacto, no me di cuenta de eso, pense que lo quería para un informe y por lo general hace falta de esa forma, si lo quiere por fila entonces con la tabla Dias, pudiera quedar así
claro en sql Server |
si ese es el problema entonces así
Creo que funcione |
creo que lo estamos mareando un poco con todas las sintaxis que estamos colocando..
seria bueno que paco se pronuncie y nos indique si ya dio con la solucion |
Aun no lo he resuelto.
Con todas las variantes que me dais obtengo el mismo resultado que con mi primera consulta, es decir, cuando no hay recepcion, por ejemplo los domingos, ese dia no me aparece en el resultado. La bbdd es Firebird 2.1 Un saludo |
Hace poco hice una consulta en el foro :
http://www.clubdelphi.com/foros/showthread.php?t=72512 Finalmente el Procedimiento Almacenado que dejé es :
Esto te permite utilizar AUTO_INC_DATE en la consulta principal, o incluso en el Join, y te facilita enormemente cualquier consulta, no sólo esta, sino cualquier otra que necesites. Tu consulta podría quedar entonces :
... el resto te lo dejo a tí ... :rolleyes: :p |
Quedaría así, probando a partir de un dia concreto
Pero da el mismo resultado que con mi consulta original
El problema es que cuando encuentra un dia en que no hay Recepción, por ejemplo un domingo, no aparece el valor 0 para ese día, sino que no aparece nada, es decir, no evalua SUM cuando encuentra NULL. Aunque lo que no entiendo es porque no funciona el LEFT JOIN, si en la tabla de la izquierda aparece un valor, por ejemplo el dia 1, debería aparecer el día 1 en el resultado, aunque en la tabla de la derecha no exista el día 1 Un saludo :o |
;) |
.... respecto de los Join y por qué no aparece un valor u otro dependiendo de si un valor existe en la tabla de la consulta principal o del Join, deberías consultar manuales para comprender correctamente los diferentes tipos de Join que existen.
|
La franja horaria es GMT +2. Ahora son las 02:14:27. |
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