Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Como ordenar datos por año

Estas en el tema de Como ordenar datos por año en el foro de Mysql en Foros del Web. Buenas foro TEngo un problema con una consulta que necesito para generar unos reportes, la idea es que en la consulta se acomoden los datos ...
  #1 (permalink)  
Antiguo 07/02/2013, 09:05
Avatar de jandrogdz  
Fecha de Ingreso: julio-2012
Ubicación: public $Guadalajara
Mensajes: 397
Antigüedad: 11 años, 9 meses
Puntos: 12
Pregunta Como ordenar datos por año

Buenas foro

TEngo un problema con una consulta que necesito para generar unos reportes, la idea es que en la consulta se acomoden los datos por totales de año y se vayan sumando al final por ejemplo:


MES AÑOS TOTALES
2011 2012 2013
Enero 10 20 25 55
Febrero 15 30 5 50


Los campos que me interesan para la consulta son estos dos:

fecha datetime,
totalFactura decimal


Ya vi como sacar el mes y anio MONTH(fecha), YEAR(fecha), pero no se como ordenar los datos para que aparescan como los necesito alguien me puede apoyar con esta consulta.


De antemano muchas gracias...
__________________
Lo imposible solo cuesta un poco mas
  #2 (permalink)  
Antiguo 07/02/2013, 10:39
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Como ordenar datos por año

Hola jandrogdz:

Retomando al idea de tu anterior post, la consulta sería muy semejante, lo único que cambiaría ahora es que en lugar de agrupar por CLIENTE tendrías que agrupar por el campo MES... checa este ejemplo:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM tabla;
  2. +-----------+------------+-------+
  3. | cliente   | fecha      | total |
  4. +-----------+------------+-------+
  5. | cliente 1 | 2012-02-01 |    10 |
  6. | cliente 2 | 2013-01-02 |    18 |
  7. | cliente 1 | 2013-02-03 |    21 |
  8. | cliente 1 | 2012-04-04 |    32 |
  9. | cliente 2 | 2013-04-05 |    11 |
  10. | cliente 1 | 2013-01-06 |    50 |
  11. | cliente 2 | 2013-02-07 |    62 |
  12. | cliente 2 | 2012-02-08 |    10 |
  13. | cliente 2 | 2012-01-09 |    12 |
  14. | cliente 1 | 2013-01-10 |    22 |
  15. | cliente 1 | 2012-01-11 |    13 |
  16. +-----------+------------+-------+
  17. 11 rows in set (0.00 sec)
  18.  
  19. mysql> SELECT
  20.     -> MONTH(fecha) num_mes,
  21.     -> SUM(CASE WHEN YEAR(fecha) = 2012 THEN total ELSE 0 END) AS A_2012,
  22.     -> SUM(CASE WHEN YEAR(fecha) = 2013 THEN total ELSE 0 END) AS A_2013,
  23.     -> SUM( total ) AS totalgral
  24.     -> FROM tabla
  25.     -> WHERE fecha BETWEEN '2011-01-01' AND '2013-02-28'
  26.     -> GROUP BY MONTH(fecha) WITH ROLLUP;
  27. +---------+--------+--------+-----------+
  28. | num_mes | A_2012 | A_2013 | totalgral |
  29. +---------+--------+--------+-----------+
  30. |       1 |     25 |     90 |       115 |
  31. |       2 |     20 |     83 |       103 |
  32. |       4 |     32 |      0 |        32 |
  33. |    NULL |     77 |    173 |       250 |
  34. +---------+--------+--------+-----------+
  35. 4 rows in set (0.00 sec)

Observa que estoy utilizando en número de mes para agrupar, no al cliente... te toca hacer la parte de convertir el número del mes a su correspondiente descripción, creo que podrás hacerlo, revisa también los anteriores posts, ahí coloqué una forma más sencilla de la que tu utilizabas al inicio.

Saludos
Leo.
  #3 (permalink)  
Antiguo 07/02/2013, 11:30
Avatar de jandrogdz  
Fecha de Ingreso: julio-2012
Ubicación: public $Guadalajara
Mensajes: 397
Antigüedad: 11 años, 9 meses
Puntos: 12
Respuesta: Como ordenar datos por año

Muchas gracias es justo lo que pretendia realizar.

Una pregunta para tener acceso al campo null como seria?

Agradesco tus comentarios.
__________________
Lo imposible solo cuesta un poco mas
  #4 (permalink)  
Antiguo 07/02/2013, 12:00
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Como ordenar datos por año

hola de nuevo jandrogdz:

¿A qué te refieres con tener acceso al campo null?

no me quedó claro qué pretendes, pero si lo que quieres hacer es aplicar algún tratamiento a este registro, puedes hacerlo como una subconsulta.

Código:
SELECT * FROM 
(
Aquí pones toda la consulta que estabas construyendo
)
where num_mes IS NULL
Saludos
Leo.
  #5 (permalink)  
Antiguo 08/02/2013, 14:22
Avatar de jandrogdz  
Fecha de Ingreso: julio-2012
Ubicación: public $Guadalajara
Mensajes: 397
Antigüedad: 11 años, 9 meses
Puntos: 12
Respuesta: Como ordenar datos por año

No vi la respuesta una dosculpa.

Loque pasa es que esa consulta la necesito para unos reportes pero no se como mostrar el campo null de que me arroja.
__________________
Lo imposible solo cuesta un poco mas
  #6 (permalink)  
Antiguo 08/02/2013, 15:32
Avatar de 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, 4 meses
Puntos: 2658
Respuesta: Como ordenar datos por año

Si te refieres a que algunos campos devuelven NULL, simplemente usas la función IFNULL(columna, valor) para reemplazar lo que la columna genera como null por un dato predefinido. Lee el manual de referencia por ejemplos y mas data.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: año, campos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:58.