Yo el interbase no lo controlo, pero lo que quieres hacer no es una tarea sencilla. Si los valores son concretos y pocos, se puede hacer por medio de sql, pero si son variados o muchos no es posible. Quizá la única forma sería utilizando procedimientos almacenados.
Para el caso que te ocupa, te puedo poner un ejemplo de como hacerlo en mysql y tú lo pasas interbase:
Código:
SELECT CIUDAD.CID,sum(if (PERSONA.PID="T1",1,0)) T1,sum(if (PERSONA.PID="T2",1,0)) T2,sum(if (PERSONA.PID="T3",1,0)) T3
FROM CIUDAD
LEFT JOIN PERSONA ON PERSONA.CID=CIUDAD.CID
LEFT JOIN TIPO ON TIPO.TID=PERSONA.ID
GROUP BY CIUDAD.CID
De manera similar se puede hacer con un case, pero en este caso no vale la pena.
En cuanto a la suma total, no te queda más remedio que calcularla por programación, a menos que lances la misma select quitando el campo ciudad.cid y el group by.
Un saludo.