No me hago a la idea (del todo) de lo que quieres conseguir sólo con la estructura de la tabla y los nombres, pero puedes probar con una
función o
Stored Procedure que te devolviera una tabla (Table valued function).
Puedes revisar la ayuda sobre funciones, pero a veces lo que aclara más las cosas es un ejemplo (sobre todo si no has trabajado nunca con ellas).
Revisa
este ejemplo (las respuestas) y te harás una idea de la estructura que puede tener la función que necesitas. Si buscas encontrarás muchos más del estilo.
La idea es definir la tabla y luego realizar uno o varios recorridos (más sencillos que la consulta inicial con JOINs) para ir rellenando las filas/columnas de la tabla a devolver.
Lo siento creo que no me he explicado muy bien...
Revisa el ejemplo o busca similares a ver si te da idea y de si te puede servir tirar por ese camino.