Te voy a recomendar dos cosas.
1) Una inserción como selección o creación de tabla como selección es siempre la más eficiente cuando se realiza una inserción masiva.
2) "Suena" como si estuviera tratando de convertir filas en columnas. Recomendaría la función de pivote de Oracle. La característica dinámica se describe aquí:Oracle Base pivote