Hay varias consideraciones. Lo primero es que si agrupas la suma de las facturas de un cliente, no tienen ningún sentido que quieras poner los datos
de la factura en la consulta, porque esos datos no son relevantes para la consulta, y por la forma que agrupa MySQL pueden darte datos erróneos.
No te olvides que un GROUP BY es una consolidación de datos, donde los datos que no participan del cálculo, generan ruido, datos "sucios".
Por otro lado, no es buena idea usar CASE, mas que en contadas ocasiones. CASE es un vicio de programadores, pero aunque el SQL lo admite, termina generando consultas ineficientes, en especial cuando sólo quieres comparar un único valor por TRUE o FALSE. En esos casos es más simple usar IF():
Código MySQL:
Ver original c.cliente,
f.folio,
f.fecha,
f.subtotaFactura,
f.ivaFactura,
f.totalFactura,
a.nombreAsociado,
SUM(IF(MONTH(f.fecha
) = 1, totalFactura
, 0)) Enero
, SUM(IF(MONTH(f.fecha
) = 2, totalFactura
, 0)) Febrero
, SUM(IF(MONTH(f.fecha
) = 3, totalFactura
, 0)) Marzo
, SUM(IF(MONTH(f.fecha
) = 4, totalFactura
, 0)) Abril
, SUM(IF(MONTH(f.fecha
) = 5, totalFactura
, 0)) Mayo
, SUM(IF(MONTH(f.fecha
) = 6, totalFactura
, 0)) Junio
, SUM(IF(MONTH(f.fecha
) = 7, totalFactura
, 0)) Julio
, SUM(IF(MONTH(f.fecha
) = 8, totalFactura
, 0)) Agosto
, SUM(IF(MONTH(f.fecha
) = 9, totalFactura
, 0)) Septiembre
, SUM(IF(MONTH(f.fecha
) = 10, totalFactura
, 0)) Octubre
, SUM(IF(MONTH(f.fecha
) = 11, totalFactura
, 0)) Noviembre
, SUM(IF(MONTH(f.fecha
) = 12, totalFactura
, 0)) Diciembre
, SUM( f.totalFactura
) totalgral
JOIN cliente c
ON f.clienteID
= c.clienteID
JOIN asociado a
ON c.asociadoID
=a.asociadoID
Otras cosas:
- AS está obsoleto, y no se requiere. Sólo existe por compatibilidad muy vieja y en los manuales de desarrollo de las empresas de software se suele recomendar no usarlo. No aporta nada y genera código confuso a simple vista.
- Cuidado con las palabras reservadas (como STATUS) en los nombres de campos, tablas o bases. Tienden a generar errores de sintaxis indetectables.
Finalmente, sobre tu última pregunta:
Cita: Agrupa las dos y les da un solo status como puedo modificar esto
El GROUP BY está mal definido para lograr eso. En tanto estés agrupando sólo por cliente y no por factura al mismo tiempo, el resultado no es técnicamente incorrecto. Pero no cumple lo que quieres porque lo que le dices a MySQL no es eso.
Al menos debería incluir la factura, o bien otro de los datos:
Código MySQL:
Ver original c.cliente,
f.folio,
f.fecha,
f.subtotaFactura,
f.ivaFactura,
f.totalFactura,
a.nombreAsociado,
SUM(IF(MONTH(f.fecha
) = 1, totalFactura
, 0)) Enero
, SUM(IF(MONTH(f.fecha
) = 2, totalFactura
, 0)) Febrero
, SUM(IF(MONTH(f.fecha
) = 3, totalFactura
, 0)) Marzo
, SUM(IF(MONTH(f.fecha
) = 4, totalFactura
, 0)) Abril
, SUM(IF(MONTH(f.fecha
) = 5, totalFactura
, 0)) Mayo
, SUM(IF(MONTH(f.fecha
) = 6, totalFactura
, 0)) Junio
, SUM(IF(MONTH(f.fecha
) = 7, totalFactura
, 0)) Julio
, SUM(IF(MONTH(f.fecha
) = 8, totalFactura
, 0)) Agosto
, SUM(IF(MONTH(f.fecha
) = 9, totalFactura
, 0)) Septiembre
, SUM(IF(MONTH(f.fecha
) = 10, totalFactura
, 0)) Octubre
, SUM(IF(MONTH(f.fecha
) = 11, totalFactura
, 0)) Noviembre
, SUM(IF(MONTH(f.fecha
) = 12, totalFactura
, 0)) Diciembre
, SUM( f.totalFactura
) totalgral
JOIN cliente c
ON f.clienteID
= c.clienteID
JOIN asociado a
ON c.asociadoID
=a.asociadoID
Por supuesto que sin ver una muestra real de datos, no te puedo decir si esto dará el resultado que necesitas. Para eso deberíamos ver la estructura de las tablas y la muestra de datos.