Ja, du kan udføre en dynamisk pivot. Nogle gange er det nemmere at oparbejde >PIVOT
forespørg først ved hjælp af en statisk version, så du kan se, hvordan forespørgslen og resultaterne vil se ud. Transform derefter forespørgslen til en dynamisk version.
Her er et eksempel på en statisk vs. dynamisk version af en forespørgsel:
Statisk (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
Dynamisk (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)
Hvis du kan give flere detaljer omkring din nuværende tabelstruktur og derefter nogle eksempeldata. Vi burde være i stand til at hjælpe dig med at oprette den version, du har brug for til din situation.
Som jeg sagde dog, nogle gange er det nemmere at starte med en statisk version, hvor du hardkoder i de kolonner, som du skal transformere først, og derefter går videre til den dynamiske version.