Es un poquito largo, pero bueno, como no se que SGBD utilizas te mando esto que valdría para Oracle, SQL Server y MySQL (Con Oracle igual se podría acortar con el DECODE()).
Código:
SELECT year(fecha) anyo,
COUNT(CASE(month(fecha)) WHEN 1 THEN 1 END) Enero,
COUNT(CASE(month(fecha)) WHEN 2 THEN 1 END) Febrero,
COUNT(CASE(month(fecha)) WHEN 3 THEN 1 END) Marzo,
COUNT(CASE(month(fecha)) WHEN 4 THEN 1 END) Abril,
COUNT(CASE(month(fecha)) WHEN 5 THEN 1 END) Mayo,
COUNT(CASE(month(fecha)) WHEN 6 THEN 1 END) Junio,
COUNT(CASE(month(fecha)) WHEN 7 THEN 1 END) Julio,
COUNT(CASE(month(fecha)) WHEN 8 THEN 1 END) Agosto,
COUNT(CASE(month(fecha)) WHEN 9 THEN 1 END) Septiembre,
COUNT(CASE(month(fecha)) WHEN 10 THEN 1 END) Octubre,
COUNT(CASE(month(fecha)) WHEN 11 THEN 1 END) Noviembre,
COUNT(CASE(month(fecha)) WHEN 12 THEN 1 END) Diciembre
FROM noticias
GROUP BY year(fecha);
Editado: Bueno con oracle no estoy seguro de si funcionaría, no recuerdo si existían las funciones de year() y month().