Si se complica pero es la forma correcta de guardar esos datos.
Podrias usar
GROUP_CONCAT y tratar el string que te generara con programación externa.
O usar
para saber el numero de columnas y luego
para construir la tabla usando el maximo obtenido en la anterior para agregar las columnas vacias.
Todo esto en programación externa.