para una tabla alumno y otra llamada meses
Código sql:
Ver originalSELECT a.nombre, IF( SUM( IF( m.idmes = 1 AND m.ESTADO = 1, 1, 0 ) ) >0, 'X', '' ) AS enero,
IF( SUM( IF(m.idmes = 2 AND m.ESTADO = 1, 1, 0 ) ) >0, 'X', '' ) AS febrero,
IF( SUM( IF(m.idmes = 3 AND m.ESTADO = 1, 1, 0 ) ) >0, 'X', '' ) AS marzo,
IF( SUM( IF(m.idmes = 4 AND m.ESTADO = 1, 1, 0 ) ) >0, 'X', '' ) AS abril,
IF( SUM( IF(m.idmes = 5 AND m.ESTADO = 1, 1, 0 ) ) >0, 'X', '' ) AS mayo,
IF( SUM(IF(m.idmes = 6 AND m.ESTADO = 1, 1, 0 ) ) >0, 'X', '' ) AS junio,
IF( SUM( IF(m.idmes = 7 AND m.ESTADO = 1, 1, 0 ) ) >0, 'X', '' ) AS julio,
IF( SUM( IF(m.idmes = 8 AND m.ESTADO = 1, 1, 0 ) ) >0, 'X', '' ) AS agosto,
IF( SUM( IF(m.idmes = 9 AND m.ESTADO = 1, 1, 0 ) ) >0, 'X', '' ) AS septiembre,
IF( SUM( IF(m.idmes = 10 AND m.ESTADO = 1, 1, 0 ) ) >0, 'X', '' ) AS octubre
FROM `alumno` a INNER JOIN meses m ON a.id = m.idalumno GROUP BY a.id
Por supuesto, si tienes una tabla con los nombres de los meses podrías hacer un GROUP_CONCAT y podrías ofrecer la lista de los meses pagados.
Pero si quieres cruces, puedes usar esta opción.