Para esos campos, prueba esta consulta:
Código sql:
Ver originalSELECT a.pnombre, a.snombre, a.papellido, a.sapellido, s.seccion, g.grado, IF( SUM( IF(p.idmes = 1 AND p.estado = 1, 1, 0 ) ) >0, 'X', '' ) AS enero, IF( SUM( IF( p.idmes = 2 AND p.estado = 1, 1, 0 ) ) >0, 'X', '' ) AS febrero,
IF( SUM( IF( p.idmes = 3 AND p.estado = 1, 1, 0 ) ) >0, 'X', '' ) AS marzo,
IF( SUM( IF( p.idmes = 4 AND p.estado = 1, 1, 0 ) ) >0, 'X', '' ) AS abril,
IF( SUM( IF( p.idmes = 5 AND p.estado = 1, 1, 0 ) ) >0, 'X', '' ) AS mayo,
IF( SUM( IF( p.idmes = 6 AND p.estado = 1, 1, 0 ) ) >0, 'X', '' ) AS junio,
IF( SUM( IF( p.idmes = 7 AND p.estado = 1, 1, 0 ) ) >0, 'X', '' ) AS julio,
IF( SUM( IF( p.idmes = 8 AND p.estado = 1, 1, 0 ) ) >0, 'X', '' ) AS agosto,
IF( SUM( IF( p.idmes = 9 AND p.estado = 1, 1, 0 ) ) >0, 'X', '' ) AS septiembre,
IF( SUM( IF( p.idmes = 10 AND p.estado = 1, 1, 0 ) ) >0, 'X', '' ) AS octubre,
IF( SUM( IF( p.idmes = 11 AND p.estado = 1, 1, 0 ) ) >0, 'X', '' ) AS noviembre,
IF( SUM( IF( p.idmes = 12 AND p.estado = 1, 1, 0 ) ) >0, 'X', '' ) AS diciembre
FROM alumnos a
INNER JOIN pagos p ON a.idalumno = p.idalumno INNER JOIN secciones s ON a.idseccion = s.idseccion INNER JOIN grados g ON a.idgrado = g.idgrado
WHERE g.idgrado = 2 AND s.idseccion = 1
GROUP BY a.idalumno
Te he puesto el WHERE con el grado y sección. Se trata de una consulta que busca los alumnos con idgrado 2 y con idseccion 1, pero también podrías utilizar el OR para unir y que busque a los alumnos que cumplan una de esas dos condiciones.