SUM() genera una acumulación de valores en un punto,por lo que es incompatible en la forma que la estás usando.
Lo correcto sería:
Código MySQL:
Ver original B.codigo,
C.nombre,
SUM(B.pending
) TotalPending
, SUM(IF(B.estado_due
= 'C', B.income
, 0)) SumaIncome
FROM colocaciones A
INNER JOIN detalle_colocaciones B
ON A.id_colocaciones
= B.id_colocaciones
A.anio = 2010
Tips:
- Las condiciones de relación entre tablas nose ponen en el WHERE sino en el FROM usando INNER JOIN o el que sea necesario.
- No es conveniente usar JOIN (o su sinónimo, la coma) simples para relacionar dos tablas, porque intentará relacionar todos los campos cuyo nombre sea igual, aunque tengan datos diferentes y dominios diferentes.
- Los valores numéricos no se deben comparar con literales porque obliga a MySQL a realizar conversiones implícitas innecesarias. Si "anio" es numérico, entonces corresponde usar
A.anio = 2010.
- Usa alias donde uses funciones agregadas, porque luego, en los programas, te puede complicar invocar las columnas, ya que la función escrita quedará como nombre de columna.