Ver Mensaje Individual
  #5 (permalink)  
Antiguo 07/02/2013, 09:11
leonardo_josue
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 10 meses
Puntos: 447
Respuesta: Query para crear un reporte detallado

Hola jandrogdz:

Lo único que tienes que hacer es agregar el modificador WIHT ROLLUP a la cláusula GROUP BY:

http://dev.mysql.com/doc/refman/5.0/...modifiers.html

Checa este ejemplo:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM tabla;
  2. +-----------+------------+-------+
  3. | cliente   | fecha      | total |
  4. +-----------+------------+-------+
  5. | cliente 1 | 2013-02-01 |    10 |
  6. | cliente 2 | 2013-01-02 |    18 |
  7. | cliente 1 | 2013-02-03 |    21 |
  8. | cliente 1 | 2013-02-04 |    32 |
  9. | cliente 2 | 2013-01-05 |    11 |
  10. | cliente 1 | 2013-01-06 |    50 |
  11. | cliente 2 | 2013-02-07 |    62 |
  12. | cliente 2 | 2013-02-08 |    10 |
  13. | cliente 2 | 2013-01-09 |    12 |
  14. | cliente 1 | 2013-01-10 |    22 |
  15. | cliente 1 | 2013-01-11 |    13 |
  16. +-----------+------------+-------+
  17. 11 rows in set (0.00 sec)
  18.  
  19. mysql> SELECT cliente, YEAR( fecha ) Anio,
  20.     -> SUM(CASE WHEN MONTH( fecha ) = 1 THEN total ELSE 0 END) AS Enero,
  21.     -> SUM(CASE WHEN MONTH( fecha ) = 2 THEN total ELSE 0 END) Febrero,
  22.     -> SUM(CASE WHEN MONTH( fecha ) = 3 THEN total ELSE 0 END) Marzo,
  23.     -> SUM( total ) AS totalgral
  24.     -> FROM tabla
  25.     -> WHERE fecha BETWEEN '2013-01-01' AND '2013-02-28'
  26.     -> GROUP BY cliente WITH ROLLUP;
  27. +-----------+------+-------+---------+-------+-----------+
  28. | cliente   | Anio | Enero | Febrero | Marzo | totalgral |
  29. +-----------+------+-------+---------+-------+-----------+
  30. | cliente 1 | 2013 |    85 |      63 |     0 |       148 |
  31. | cliente 2 | 2013 |    41 |      72 |     0 |       113 |
  32. | NULL      | 2013 |   126 |     135 |     0 |       261 |
  33. +-----------+------+-------+---------+-------+-----------+
  34. 3 rows in set (0.00 sec)


En cuanto al comentario de dark_17

Cita:
Esa consulta que estas haciendo te va traer problemas men, es muy pesada, con datos grandes va volar estas usando 12 clausulas SUM
No estoy de acuerdo, Siempre será preferible hacer las consultas del lado del servidor de BD y no utilizando algún lenguaje de programación, pues a final de cuentas el bucle tendría que recorrer el total de registros de la tabla, mientras que el motor de BD tiene procesos optimizados para hacer las consultas más eficientes. Si tienes un buen manejo de índices, podría apostar mi desayuno del día de hoy a que sería más rápido la consulta que lo que propone dark_17.

Sería interesante que hicieras la prueba y nos dijeras los resultados... pero mucho ojo, temas de programación no se deben tratar en este foro... políticas de uso.

Saludos
Leo.