tenho uma tabela com os seguintes dados
First Second Third Fourth Fifth Sixth
2013-08-20 2013-08-21 2013-08-22 2013-08-23 2013-08-24 2013-08-25
E usandoUNPIVOT
SELECT Data
,DATENAME(DW, Data) AS DayName
FROM Cal
UNPIVOT(Data FOR D IN (
First,
Second,
Third,
Fourth,
Fifth,
Sixth )) AS unpvt
recebo o seguinte resultado
Data DayName
2013-08-20 Tuesday
2013-08-21 Wednesday
2013-08-22 Thursday
2013-08-23 Friday
2013-08-24 Saturday
2013-08-25 Sunday
Agora, minha pergunta é: podemos passar nomes de colunas dinamicamente para the UNPIVOT
para que, quando as colunas na tabela aumentarem, não precisemos alterar a instrução.
Se você tiver um número desconhecido de colunas que precisará desdinamizar, precisará analisar a implementação do SQL dinâmico.
Você pode usar
sys.columns
para obter os nomes de todas as colunas em suacal
tabela. Se você usar a seguinte consulta, obterá a lista de todas as colunas da sua tabela:Agora você pode usar esta consulta junto com
FOR XML PATH
para criar uma lista separada por vírgulas dos nomes a serem concatenados a uma string a ser executada:Por fim, você pegará essa lista e a colocará em sua string de consulta para ser executada, de modo que a consulta completa se pareça com:
Veja SQL Fiddle com demonstração