Sí, puede realizar un pivote dinámico. A veces es más fácil trabajar con PIVOT
consulta usando una versión estática primero para que puedas ver cómo aparecerán la consulta y los resultados. Luego transforme la consulta en una versión dinámica.
Este es un ejemplo de una versión estática frente a una dinámica de una consulta:
Estático (SQL Fiddle ):
select *
from
(
select u.userid,
u.fname,
u.lname,
u.mobile,
r.question,
r.choice
from users u
left join results r
on u.questionid = r.questionid
and u.choiceid = r.choiceid
) x
pivot
(
min(choice)
for question in([are you], [from])
) p
Dinámico (SQL Fiddle ):
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX)
SET @cols = STUFF((SELECT distinct ',' + QUOTENAME(c.question)
FROM results c
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query = 'SELECT userid, fname, lname, mobile, ' + @cols + ' from
(
select u.userid,
u.fname,
u.lname,
u.mobile,
r.question,
r.choice
from users u
left join results r
on u.questionid = r.questionid
and u.choiceid = r.choiceid
) x
pivot
(
min(choice)
for question in (' + @cols + ')
) p '
execute(@query)
Si puede proporcionar más detalles sobre la estructura de su tabla actual y luego algunos datos de muestra. Deberíamos poder ayudarlo a crear la versión que necesitaría para su situación.
Sin embargo, como dije, a veces es más fácil comenzar con una versión estática, en la que primero codifica las columnas que necesita transformar y luego pasa a la versión dinámica.