Ja, du kan utföra en dynamisk pivot. Ibland är det lättare att arbeta upp PIVOT fråga med en statisk version först så att du kan se hur frågan och resultaten kommer att se ut. Omvandla sedan frågan till en dynamisk version.
Här är ett exempel på en statisk kontra dynamisk version av en fråga:
Statisk (SQL-fiol ):
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
Dynamisk (SQL-fiol ):
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)
Om du kan ge mer information om din nuvarande tabellstruktur och sedan några exempeldata. Vi borde kunna hjälpa dig att skapa den version som du skulle behöva för din situation.
Men som sagt, ibland är det lättare att börja med en statisk version, där du hårdkodar i kolumnerna som du måste transformera först, och sedan går du vidare till den dynamiska versionen.