Ver Mensaje Individual
  #5 (permalink)  
Antiguo 04/01/2018, 05:11
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Datos ultimos meses... 0 si no hay datos

Vamos a ver si se entiende la idea...

Creo una tabla basica de ventas:

Código SQL:
Ver original
  1. mysql> CREATE TABLE ventas(id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, fecha datetime, importe DECIMAL(14,3));
  2. Query OK, 0 ROWS affected (0.23 sec)

Inserto algunas pocas ventas:
Código SQL:
Ver original
  1. mysql> INSERT INTO ventas(fecha, importe)
  2.     -> VALUES('2017-01-11 17:45:00', 1234.21),
  3.     -> ('2017-03-11 13:45:00', 1234.21),
  4.     -> ('2017-11-11 17:45:00', 1234.21);
  5. Query OK, 3 ROWS affected (0.10 sec)
  6. Records: 3  Duplicates: 0  Warnings: 0
Creo una tabla de meses:
Código SQL:
Ver original
  1. mysql> CREATE TABLE meses(nro_mes SMALLINT PRIMARY KEY, nombre_mes VARCHAR(100));
  2. Query OK, 0 ROWS affected (0.24 sec)
La lleno con los meses:
Código SQL:
Ver original
  1. mysql> INSERT INTO meses
  2.     -> VALUES (1, 'Enero'),
  3.     -> (2, 'Febrero'),
  4.     -> (3, 'Marzo'),
  5.     -> (4, 'Abril'),
  6.     -> (5, 'Mayo'),
  7.     -> (6, 'Junio'),
  8.     -> (7, 'Julio'),
  9.     -> (8, 'Agosto'),
  10.     -> (9, 'Septiembre'),
  11.     -> (10, 'Octubre'),
  12.     -> (11, 'Noviembre'),
  13.     -> (12, 'Diciembre');
  14. Query OK, 12 ROWS affected (0.05 sec)
  15. Records: 12  Duplicates: 0  Warnings: 0

Hago una consulta usando la funcion IFNULL para poner ceros donde no hay datos:
Código SQL:
Ver original
  1. mysql> SELECT 2017 Anio, nro_mes Mes, IFNULL(importe, 0.0) importe
  2.     -> FROM meses M LEFT JOIN ventas V ON M.nro_mes = MONTH(fecha);
  3. +------+-----+----------+
  4. | Anio | Mes | importe  |
  5. +------+-----+----------+
  6. | 2017 |   1 | 1234.210 |
  7. | 2017 |   2 |    0.000 |
  8. | 2017 |   3 | 1234.210 |
  9. | 2017 |   4 |    0.000 |
  10. | 2017 |   5 |    0.000 |
  11. | 2017 |   6 |    0.000 |
  12. | 2017 |   7 |    0.000 |
  13. | 2017 |   8 |    0.000 |
  14. | 2017 |   9 |    0.000 |
  15. | 2017 |  10 |    0.000 |
  16. | 2017 |  11 | 1234.210 |
  17. | 2017 |  12 |    0.000 |
  18. +------+-----+----------+
  19. 12 ROWS IN SET (0.00 sec)

Esa es la idea básica, que puedes combinar como desees.

¿Queda mas claro así?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)