Ver Mensaje Individual
  #5 (permalink)  
Antiguo 23/08/2012, 09:25
leonardo_josue
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 9 meses
Puntos: 447
Respuesta: Agrupar x meses

Hola de nuevo tumbero_x:

En mi post pasado escribía esto:

Cita:
No me queda claro cómo es que necesitas presentar la información... creo que sería conveniente en primer lugar que nos digas cuál es la estructura de tu tabla, que nos pongas algunos datos de ejemplo y que nos digas exactamente qué es lo que pretendes obtener como salida..
Pero veo que no seguiste mi consejo... hablas de un campo compra_cod_prov, pero no nos dices ni de qué tipo es, ni que información almacena ni nada por el estilo... los datos brillan por su ausencia y tampoco te molestaste en mostrarnos cuál es el resultado de la ejecución de la consulta que pusiste... así es muy difícil tratar de ayudarte. En realidad resultaría más útil que hubieras puesto esta información que la consulta que hiciste... de esta manera podríamos plantear una solución diferente a la que estás tratando de hacer.

Finalmente, y a modo de aprendizaje, la sentencia CASE-WHEN tiene dos formas de utilizarse... en tu caso en realidad estás haciendo 12 comparaciones, una por cada mes, pero podrías hacer una sola comparación, checa este script:

Código MySQL:
Ver original
  1. mysql> SELECT fecha,
  2.     ->   CASE
  3.     ->   WHEN MONTH(fecha) = 1 THEN "ene"
  4.     ->   WHEN MONTH(fecha) = 2 THEN "feb"
  5.     ->   WHEN MONTH(fecha) = 3 THEN "mar"
  6.     ->   WHEN MONTH(fecha) = 4 THEN "abr"
  7.     ->   WHEN MONTH(fecha) = 5 THEN "may"
  8.     ->   WHEN MONTH(fecha) = 6 THEN "jun"
  9.     ->   WHEN MONTH(fecha) = 7 THEN "jul"
  10.     ->   WHEN MONTH(fecha) = 8 THEN "ago"
  11.     ->   WHEN MONTH(fecha) = 9 THEN "sep"
  12.     ->   WHEN MONTH(fecha) = 10 THEN "oct"
  13.     ->   WHEN MONTH(fecha) = 11 THEN "nov"
  14.     ->   WHEN MONTH(fecha) = 12 THEN "dic"
  15.     ->   END mes
  16.     -> FROM meses;
  17. +------------+------+
  18. | fecha      | mes  |
  19. +------------+------+
  20. | 2012-01-01 | ene  |
  21. | 2012-02-01 | feb  |
  22. | 2012-03-01 | mar  |
  23. | 2012-04-01 | abr  |
  24. | 2012-05-01 | may  |
  25. | 2012-06-01 | jun  |
  26. | 2012-07-01 | jul  |
  27. | 2012-08-01 | ago  |
  28. | 2012-09-01 | sep  |
  29. | 2012-10-01 | oct  |
  30. | 2012-11-01 | nov  |
  31. | 2012-12-01 | dic  |
  32. +------------+------+
  33. 12 rows in set (0.00 sec)
  34.  
  35. mysql> SELECT fecha,
  36.     ->   CASE MONTH(fecha)
  37.     ->   WHEN 1 THEN "ene"
  38.     ->   WHEN 2 THEN "feb"
  39.     ->   WHEN 3 THEN "mar"
  40.     ->   WHEN 4 THEN "abr"
  41.     ->   WHEN 5 THEN "may"
  42.     ->   WHEN 6 THEN "jun"
  43.     ->   WHEN 7 THEN "jul"
  44.     ->   WHEN 8 THEN "ago"
  45.     ->   WHEN 9 THEN "sep"
  46.     ->   WHEN 10 THEN "oct"
  47.     ->   WHEN 11 THEN "nov"
  48.     ->   WHEN 12 THEN "dic"
  49.     ->   END mes
  50.     -> FROM meses;
  51. +------------+------+
  52. | fecha      | mes  |
  53. +------------+------+
  54. | 2012-01-01 | ene  |
  55. | 2012-02-01 | feb  |
  56. | 2012-03-01 | mar  |
  57. | 2012-04-01 | abr  |
  58. | 2012-05-01 | may  |
  59. | 2012-06-01 | jun  |
  60. | 2012-07-01 | jul  |
  61. | 2012-08-01 | ago  |
  62. | 2012-09-01 | sep  |
  63. | 2012-10-01 | oct  |
  64. | 2012-11-01 | nov  |
  65. | 2012-12-01 | dic  |
  66. +------------+------+
  67. 12 rows in set (0.00 sec)

La primer consulta es tal y como la estás manejando, que en términos de programación se comporta como un IF anidado. En la segunda consulta sólo se compara una vez, y en términos de programación se comporta como un SWITCH.

Saludos
Leo.