SQL - reporte mensual filtranco de dos tablas

 
Vista:

reporte mensual filtranco de dos tablas

Publicado por RONALD (8 intervenciones) el 08/12/2011 21:42:52
buen dia esta es mi consulta tengo las siguientes tablas:
REACTIVO
id cod_reac NOMBRE CANT_ TOTAL
1 FR12 ACETONA 30
2 FE13 ACIDO ACETICO 15
3 32FR ACIDO SULFUROSO 17
4 244G BENCENO 12
5 23RF LAVANDINA 0
6 23RT ETHER 18

SALIDA
ID COD_REAC CANTIDAD FECHA_SALIDA
1 FR12 5 6/5/2011
2 FR12 3 6/5/2011
3 32FR 1 6/6/2011
4 FR12 2 7/6/2011
5 23RT 5 6/6/2011
6 244G 2 7/23/2011
7 32FR 1 7/23/2011

y quero sacar un reporte por mes de la cantidad de cada reactivo que sacaron si no sacaron ninguno simplemente que salga vacio o cero com se muestra:


REPORTE DE TODO LO QUE SALIO EN EL MES DE JUNIO
RESULTADO
NOMBRE cod_reac TOTAL_TALIDO
ACETONA FR12 8
ACIDO ACETICO FE13 0
ACIDO SULFUROSO 32FR 1
BENCENO 244G 0
LAVANDINA 23RF 0
ETHER 23RT 5


CON MI CONSULTA LO
SELECT Nombre ,salida.cod_reac, Sum(salida.CANTIDAD) FROM salida INNER JOIN REACTIVO ON salida.COD_REAC = REACTIVO.COD_REAC WHERE SALIDA.FECHA_SALIDA BETWEEN #06/01/2011# AND #06/30/2011# GROUP BY SALIDA.COD_REAC, REACTIVO.Nombre;


LO QUE OBTENGO ES

NOMBRE cod_reac TOTAL_SALIDO
ACETONA FR12 8
ACIDO SULFUROSO 32FR 1
ETHER 23RT 5

QUE SOLO MUESTRA LA INFORMACION DE LOS REACTIVOS QUE SALIERON YO QUISIERA QUE SANGAN TODOS LOS REACTIVOS A LA ESPERA DE SUS COMENTARIOS GRACIAS.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 806
Bronce
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

reporte mensual filtranco de dos tablas

Publicado por leonardo_josue (1173 intervenciones) el 08/12/2011 22:47:09
Hola ronald:

Utiliza un LEFT JOIN en lugar de un INNER JOIN... si no sabes cuál es la diferencia entre los diferentes tipos de JOIN's te recomiendo que le preguntes a Santa Wikipedia...

http://es.wikipedia.org/wiki/Join

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

reporte mensual filtranco de dos tablas

Publicado por RONALD (8 intervenciones) el 08/12/2011 23:10:12
LO INTENTO CON EL LEFT JOIN PERO EL RESLTADO ES EL MISMO SOLO ME MUESTRA LOS DATOS QUE SUBRIERON MOVIMIENTO Y LOS DEMAS NADA
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 806
Bronce
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

reporte mensual filtranco de dos tablas

Publicado por leonardo_josue (1173 intervenciones) el 09/12/2011 16:52:45
Hola de nuevo RONALD:

¿Leíste el contenido de la liga que te puse? creo que no... pues si lo hubieras hecho te habrías dado cuenta que tanto en el LEFT JOIN como en el RIGTH JOIN el orden en que pones las tablas en el from y en los INNER JOIN es muy importante. En el caso del LEFT JOIN en el FROM debes colocar la tabla que quieres que aparezca completa... en el caso del RIGTH JOIN debes colocarla en el INNER JOIN...

Aunque no lo mencionas en tu post, por el tipo de sintaxis de tu consulta estás trabajando con ACCESS. En estos momentos no puedo probar en el equipo, pues no tengo instalado ningún OFFICE, pero te dejo este script de MySQL.... con excepción del manejo de fechas el resto de la consulta debe ser exactamente el mismo.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
mysql> CREATE TABLE reactivo (id INT, cod_reac VARCHAR(4), nombre VARCHAR(20),
    -> cant_total INT);
Query OK, 0 rows affected (0.09 sec)
 
mysql> INSERT INTO reactivo VALUES (1, 'FR12', 'ACETONA', 30),
    -> (2, 'FE13', 'ACIDO ACETICO', 15),
    -> (3, '32FR', 'ACIDO SULFUROSO', 17), (4, '244G', 'BENCENO', 12),
    -> (5, '23RF', 'LAVANDINA', 0), (6, '23RT', 'ETHER', 18);
Query OK, 6 rows affected (0.06 sec)
Records: 6  Duplicates: 0  Warnings: 0
 
mysql> SELECT * FROM reactivo;
+------+----------+-----------------+------------+
| id   | cod_reac | nombre          | cant_total |
+------+----------+-----------------+------------+
|    1 | FR12     | ACETONA         |         30 |
|    2 | FE13     | ACIDO ACETICO   |         15 |
|    3 | 32FR     | ACIDO SULFUROSO |         17 |
|    4 | 244G     | BENCENO         |         12 |
|    5 | 23RF     | LAVANDINA       |          0 |
|    6 | 23RT     | ETHER           |         18 |
+------+----------+-----------------+------------+
6 rows in set (0.00 sec)
 
mysql> CREATE TABLE salida (id INT, cod_reac VARCHAR(4), cantidad INT,
    -> fecha_salida DATE);
Query OK, 0 rows affected (0.08 sec)
 
mysql> INSERT INTO salida VALUES (1, 'FR12', 5, '2011-06-05'),
    -> (2, 'FR12', 3, '2011-06-05'), (3, '32FR', 1, '2011-06-06'), (4, 'FR12', 2, '2011-07-06'),
    -> (5, '23RT', 5, '2011-06-06'), (6, '244G', 2, '2011-07-23'), (7, '32FR', 1, '2011-07-23');
Query OK, 7 rows affected (0.05 sec)
Records: 7  Duplicates: 0  Warnings: 0
 
mysql> SELECT * FROM salida;
+------+----------+----------+--------------+
| id   | cod_reac | cantidad | fecha_salida |
+------+----------+----------+--------------+
|    1 | FR12     |        5 | 2011-06-05   |
|    2 | FR12     |        3 | 2011-06-05   |
|    3 | 32FR     |        1 | 2011-06-06   |
|    4 | FR12     |        2 | 2011-07-06   |
|    5 | 23RT     |        5 | 2011-06-06   |
|    6 | 244G     |        2 | 2011-07-23   |
|    7 | 32FR     |        1 | 2011-07-23   |
+------+----------+----------+--------------+
7 rows in set (0.00 sec)
 
mysql> #utilizando INNER JOIN
mysql> SELECT nombre, reactivo.cod_reac, SUM(salida.cantidad)
    -> FROM  reactivo
    -> INNER JOIN salida ON
    -> salida.cod_reac = reactivo.cod_reac AND
    -> salida.fecha_salida BETWEEN '2011-06-01' AND '2011-06-30'
    -> GROUP BY reactivo.cod_reac, reactivo.nombre;
+-----------------+----------+----------------------+
| nombre          | cod_reac | SUM(salida.cantidad) |
+-----------------+----------+----------------------+
| ETHER           | 23RT     |                    5 |
| ACIDO SULFUROSO | 32FR     |                    1 |
| ACETONA         | FR12     |                    8 |
+-----------------+----------+----------------------+
3 rows in set (0.00 sec)
 
mysql> #Utilizando LEFT JOIN
mysql> SELECT nombre, reactivo.cod_reac, SUM(salida.cantidad)
    -> FROM  reactivo
    -> LEFT JOIN salida ON
    -> salida.cod_reac = reactivo.cod_reac AND
    -> salida.fecha_salida BETWEEN '2011-06-01' AND '2011-06-30'
    -> GROUP BY reactivo.cod_reac, reactivo.nombre;
+-----------------+----------+----------------------+
| nombre          | cod_reac | SUM(salida.cantidad) |
+-----------------+----------+----------------------+
| LAVANDINA       | 23RF     |                 NULL |
| ETHER           | 23RT     |                    5 |
| BENCENO         | 244G     |                 NULL |
| ACIDO SULFUROSO | 32FR     |                    1 |
| ACIDO ACETICO   | FE13     |                 NULL |
| ACETONA         | FR12     |                    8 |
+-----------------+----------+----------------------+
6 rows in set (0.00 sec)
 
mysql> #Utilizando RIGHT JOIN
mysql> SELECT nombre, reactivo.cod_reac, SUM(salida.cantidad)
    -> FROM  salida
    -> RIGHT JOIN reactivo ON
    -> salida.cod_reac = reactivo.cod_reac AND
    -> salida.fecha_salida BETWEEN '2011-06-01' AND '2011-06-30'
    -> GROUP BY reactivo.cod_reac, reactivo.nombre;
+-----------------+----------+----------------------+
| nombre          | cod_reac | SUM(salida.cantidad) |
+-----------------+----------+----------------------+
| LAVANDINA       | 23RF     |                 NULL |
| ETHER           | 23RT     |                    5 |
| BENCENO         | 244G     |                 NULL |
| ACIDO SULFUROSO | 32FR     |                    1 |
| ACIDO ACETICO   | FE13     |                 NULL |
| ACETONA         | FR12     |                    8 |
+-----------------+----------+----------------------+
6 rows in set (0.00 sec)


Observa que la única diferencia entre el LEFT JOIN y el RIGHT JOIN es el orden en que pones las tablas. Lo único que faltaría es sustituir NULL por un cero, pero espero que eso lo puedas hacer por tu cuenta.

Ronald... en un futuro no esperes que aquí se te ponga la solución como esta... hay que intentar hacer las cosas por tu propia cuenta. mucho ojo con eso.

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

reporte mensual filtranco de dos tablas

Publicado por ronald (8 intervenciones) el 11/12/2011 03:30:57
Muchisimas gracias leo si lo intente pero de una manera mas larga lo que ice fue primero una consulta filtrando por la fecha y posteriormente use mi consulta que anteriormente planteaba perso sin el where y me salio pero veo que la forma que me la planteas es mas corta y efiente muchisimas gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar