Creo que solo tiene CASE...
Algo así funcionaria? hace rato no trabajo firebird y la idea está como confusa... yo me iria mejor por el lado del SP o de trabajar todo en el programa si a la final no se debe almacenar en ningun lado y si es un reporte de datos anuales la sentencia va a ser bastante costosa. Un amigo DBA de oracle me dice mejor hacer muchas sentencias efectivas y con poco costo y no una gran sentencia con un costo excesivo.
Código SQL
[-]
SELECT
IDCLIENTE,
(CASE EXTRACT(MONTH, FECHAVENTA)
WHEN 1 THEN SUM(VALORVENTA)
END) AS ENERO
..
(CASE EXTRACT(MONTH, FECHAVENTA)
WHEN 12 THEN SUM(VALORVENTA)
END) AS DICIEMBRE
FROM VENTAS