Quieres que mysql te devuelva una estructura de datos en árbol?
Buena suerte con eso..
Antes de considerar un problema el que el "while te vaya a poner 12 veces el nombre del alumno", considera el problema de que "mysql va a procesar 12 veces la misma información, y me va a enviar filas y filas con información repetida".Eso cuesta también.
En cualquier caso, dices "si hago un while para mostrar".El asunto es que tienes que hacer un while para procesar.Tan sencillo como :
Código PHP:
Ver original...
while (...)
{
if(!isset($alumnos[$row["ALUMNO"]])) {
$alumnos[$row["ALUMNO"]]=$row;
$alumnos["COLEGIATURAS"]=array(); }
$alumnos["COLEGIATURAS"][]=array("ENERO"=>...) }