Para dinamizar, você deve usar a cláusula de pivô da instrução select:
select *
from testtable
pivot ( max(name)
for id in (1,2,3,4)
)
Isso não é particularmente bonito de se fazer no SQL, portanto, você deve considerar cuidadosamente se é isso que deseja fazer. Eu normalmente uso o Oracle Base para exemplos de pivô, mas existem muitos por aí.
Aqui está um pequeno SQL Fiddle para demonstrar.