Bueno, algunos detalles:
- Las funciones TO_CHAR() y TO_DATE() no pertenecen al estandar SQL ni tampoco a MySQL. Puede que estés preguntando en el foro equivocado. ¿Qué DBMS usas?
- MySQL no posee la cláusula PIVOT, por lo que no puede invertir una tabla de la forma en que lo pides. 
- La tabla tal y como la quieres sólo se puede hacer, al menos con una consulta a MySQL, únicamente por programación, cosa que debes resolver en otro foro.
- Lo que si puede hacer en MySQL es obtener una tabla resultado que pueads usar para contruir el reporte como lo quieres por programación:   
Código MySQL:
Ver original-     MONTH(- p.pers_fnacimiento )-  Mes ,
 
-     SUM(IF(- p.pers_sexo  = 'H', 1, 0))-  Hombres ,
 
-     SUM(IF(- p.pers_sexo  = 'M', 1, 0))-  Mujeres ,
 
Esta tabla resultado la deberás procesar en el lenguaje que uses (tema fuera del alcance de este foro).