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

Ordenar consulta por meses aunque no haya resultados

Estas en el tema de Ordenar consulta por meses aunque no haya resultados en el foro de Mysql en Foros del Web. Qué tal? Temgo la siguiente consulta que me da lo pago, impago y la suma de ambos en un determinado período (mes actual y 9 ...
  #1 (permalink)  
Antiguo 09/06/2012, 07:24
 
Fecha de Ingreso: junio-2012
Mensajes: 7
Antigüedad: 11 años, 10 meses
Puntos: 0
Ordenar consulta por meses aunque no haya resultados

Qué tal?
Temgo la siguiente consulta que me da lo pago, impago y la suma de ambos en un determinado período (mes actual y 9 meses hacia atrás por default). Hasta ahí, perfecto. El tema es cuando aparecen períodos que no tiienen resultados (agrupo por mes). Para esos necesito que me vuelva en 0, pero no que no lo tenga en cuenta, porque después ordeno esto en una tabla html con fechas y se me corren las columnas. Paso la consulta como está:

SELECT
YEAR(PI.date_invoice) AS year,
MONTH(PI.date_invoice) AS month,
@unpaid := SUM(CASE
WHEN PI.status = '1' THEN PI.amount_dolar
ELSE 0
END) AS unpaid,
@paid := SUM(CASE
WHEN PI.status = '2' THEN PI.amount_dolar
ELSE 0
END) AS paid,
@total := SUM(CASE
WHEN PI.status != '3' THEN PI.amount_dolar
ELSE 0
END) AS total
FROM crm_provider_invoice PI
LEFT JOIN crm_provider P ON(PI.id_provider = P.id_provider)
WHERE DATE_FORMAT(PI.date_invoice, '%Y-%m-%d') BETWEEN DATE_SUB(LAST_DAY(SYSDATE()), INTERVAL 9 MONTH) AND DATE_SUB(LAST_DAY(SYSDATE()), INTERVAL 0 MONTH)
GROUP BY MONTH(PI.date_invoice)
ORDER BY year DESC, month DESC

Lo que necesitaría son los registros mes a mes, sin importar si hay o no. Y en los casos en los que no haya que me permita generar el mes con valores 0 para lo pago, impago y el total.
El que pueda ayudarme con esto le estaré agradecido.

Última edición por malbo; 09/06/2012 a las 07:51
  #2 (permalink)  
Antiguo 11/06/2012, 05:51
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Ordenar consulta por meses aunque no haya resultados

Dos formas....

Agregando una tabla fija con los meses a la query mediante un left join y usando IFNULL(... ,0).

En la programación externa recorrer un array con los meses para poner las cabeceras de las colunas y lego los datos en la columna que toque....

Basicamente es la misma solución quizas es más facil la primera pero no es muy elegante des del punto de vista de bbdd.

Cita:
GROUP BY MONTH(PI.date_invoice)
Estas agregando solo por el mes y deberias agregar por año y mes.... bueno si solo tienes en cuenta nueve meses es igual....
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Etiquetas: jquery-mobile
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:43.