Considerando que todas las subconsultas llevan los mismos parámetros, con excepción de uno, y ese sólo es el relevante para la cuenta, simplemente contaría ese. Además, me sorprendería que no estuviese devolviendo errores de sintaxis.
Yo lo podria así:
Código MySQL:
Ver original IF(E
> 0, E
, '') EJECUCION
, IF(S
> 0, S
, '') SUSPENDIDO
, IF(P
> 0, P
, '') PROBLEMA
COUNT(IF(cc.ID_SITUACION
= 18, cc.ID_CONTRATO
,0)) E
, COUNT(IF(cc.ID_SITUACION
= 19, cc.ID_CONTRATO
,0)) S
, COUNT(IF(cc.ID_SITUACION
= 39, cc.ID_CONTRATO
,0)) M
, COUNT(IF(cc.ID_SITUACION
= 46, cc.ID_CONTRATO
,0)) P
contrato c
INNER JOIN especialidad e
ON e.ID_ESPECIALIDAD
= c.ID_ESPECIALIDAD
INNER JOIN departamento d
ON d.ID_DEPARTAMENTO
= e.ID_DEPARTAMENTO
d.NOMBRE_CORTO = '".$this->getNombre_corto_departamento()."'
AND c.ID_TIPO_CONTRATO
= '".$this->getId_tipo_contrato()."') TABLA
;
Por cierto, un sano consejo es
jamás pongas subconsultas en el SELECT si puedes evitarlo. Son desastrosas para la performance, porque se ejecutan una vez por cada registro devuelto en la consulta principal, por lo que el resultado en realidad podría estar siendo calamitoso...