HELP - SubSelect dentro de uma clausula CASE + Postgresql

Amigos, estou com um problema,

preciso fazer um subselect dentro de um case dentro de um select como no exemplo abaixo:

Select codigo, B, CASE a WHEN 'b' THEN (select Count(*) from tabela2 t2 WHERE t2.codigo = t1.codigo) WHEN 'c' THEN (select COUNT(*) from tabela3 t3 WHERE t3.codigo = t1.codigo) END FROM tabela1 t1

no SQL eu consegui fazer tranquilo, porem quando passo para HQL da problema…
no HQL eu consigo fazer um subselect normal:

Select codigo, B,  (select COUNT(*) from tabela3 t3 WHERE t3.codigo = t1.codigo)  From tabela1 t1

e tambem consigo fazer um CASE

Select codigo, B, CASE a WHEN 'b' THEN 's END From tabela1 t1

Mas colocar o subselect dentro do CASE nao estou conseguindo, ele me da um nullpoint exception… alguem pode me ajudar??

segue o meu Sql

	" SELECT " +
		    	" 	m.cdMensagem, " +
		    	" 	mt.tpMensagem,  " +
		    	" 	i.nmInstituicao, " +
		    	" 	u.nmUsuario, " +
		    	" 	m.dtMensagem, " +
		    	" 	m.hrMensagem, " +
		    	" 	m.cdStatusMensagem, " +
		    	" 	m.nrProtocolo, " +
		    	" 	m.dtDiaResposta, " +
		    	" 	m.dtNegativacaoResposta, " +
		    	" 	m.icNecessitaResposta, " +
		    	" 	m.cdUsuarioAssinarAprovar, " +
		    	" 	m.icRequerRespostaParte, " +
		    	" 	cmi.cdCaixaInstituicao, " +
		    	" CASE mt.tpMensagem WHEN 'Consulta' THEN " +
		    
		    	"		 (SELECT  count(*)  " +
		    	" 		FROM  TbMensagemItem mi1 " +
		    	" 		JOIN mi1.tbMensagemItemRespostaList mir1  " +
		    	" 		WHERE mi1.tbMensagem.cdMensagem = 1 AND mir1.icRespostaPositiva = false) " +
		    	" 	END as negativas " +
		    	" FROM " +
		    	" 	TbMensagem m " +
		    	" JOIN " +
		    	" 	m.tbMensagemTipo mt " +
		    	" JOIN " +
		    	" 	m.tbCaixaMensagemInstituicao cmi " +
		    	" JOIN " +
		    	" 	cmi.tbInstituicao i  " +
		    	" JOIN " +
		    	" 	m.tbUsuario u  " +
		    	" WHERE " +
		    	" 	m.tbCaixaMensagemInstituicao.cdCaixaInstituicao = 11  " +
		    	" ORDER BY m.cdMensagem DESC "

se nesse codigo acima, eu tirar as linhas

" CASE mt.tpMensagem WHEN 'Consulta' THEN "


" 	END as negativas " +

ele roda… e se eu trocar o

		    	"		 (SELECT  count(*)  " +
		    	" 		FROM  TbMensagemItem mi1 )" +
		    	" 		JOIN mi1.tbMensagemItemRespostaList mir1  " +
		    	" 		WHERE mi1.tbMensagem.cdMensagem = 1 AND mir1.icRespostaPositiva = false) " +

por 's'
ele tambem funciona…

mas deixar ocmo esta da errado… alguem pode me ajudar??

obrigado