O exemplo em http://jdixon.dotnetdevelopersjournal.com/pivot_table_data_in_sql_server_2000_and_2005.htm só funciona se você souber antecipadamente quais podem ser os valores de linha. Por exemplo, digamos que você tenha uma entidade com atributos personalizados e os atributos personalizados sejam implementados como linhas em uma tabela filha, onde a tabela filha é basicamente pares de variável/valor e esses pares de variável/valor são configuráveis.
color red
size big
city Chicago
Vou descrever uma técnica que funciona. Eu usei. Eu não estou promovendo isso, mas funciona.
Para dinamizar os dados onde você não sabe quais podem ser os valores antecipadamente, crie uma tabela temporária dinamicamente sem colunas. Em seguida, use um cursor para percorrer suas linhas, emitindo uma "alter table" construída dinamicamente para cada variável, de modo que no final sua tabela temporária tenha as colunas, cor, tamanho, cidade.
Em seguida, você insere uma linha em sua tabela temporária, atualiza-a por meio de outro cursor através da variável, pares de valores e, em seguida, seleciona-a, geralmente unida à sua entidade pai, fazendo com que pareça que esses pares de variável / valor personalizados eram como embutidos. em colunas na entidade pai original.