Fiz uma pesquisa rápida e pelo que vi a função count do Informix não aceita uma expressão como no Postgresql e além disso não podemos usar uma subquery na clausula from, que seria uma segunda alternativa. Sendo assim a query fica mais complicada tendo
que ser divida em três etapas com uso de tabelas temporárias. Um detalhe importante desta estratégia é as três etapas devem ser executadas na mesma transação.
Veja se funciona assim:
Etapa1 - Contando por mês :
select
faprocad.cod_pro as Codigo,
faprocad.nome_pro as Profissional,
COUNT(*) as qt,
MONTH (FAPACCAD.DATA_ENT) as mes
from faprocad,fapaccad
WHERE FAPROCAD.COD_PRO = FAPACCAD.COD_PRO
AND FAPACCAD.DATA_ENT >= '01/01/2009'
AND FAPACCAD.DATA_ENT <= '31/12/2009'
AND FAPACCAD.TIPO_PAC IN ('I')
GROUP BY faprocad.cod_pro, faprocad.nome_pro, MONTH (FAPACCAD.DATA_ENT)
INTO TEMP RESULT1;
Etapa2 - Classificando os meses:
select Codigo, Profissional,
case when mes = 1 THEN qt end as jan,
case when mes = 2 THEN qt end as fev,
case when mes = 3 THEN qt end as mar,
case when mes = 4 THEN qt end as abr,
case when mes = 5 THEN qt end as mai,
case when mes = 6 THEN qt end as jun,
case when mes = 7 THEN qt end as jul,
case when mes = 8 THEN qt end as ago,
case when mes = 9 THEN qt end as set,
case when mes = 10 THEN qt end as out,
case when mes = 11 THEN qt end as nov,
case when mes = 12 THEN qt end as dez
from RESULT1
INTO TEMP RESULT2;
Etapa3 - Agrupando o resultado:
select Codigo, Profissional, max(jan) as jan, max(fev) as fev, max(mar) as mar, max(abr) as abr,
max(mai) as mai max(jun) as jun, max(jul) as jul, max(ago) as ago, max(set) as set, max(out) as out,
max(nov) as nov, max(dez) as dez
from RESULT2
group by Codigo, Profissional;