Ja, Sie können einen dynamischen Pivot durchführen. Manchmal ist es einfacher, den
Hier ist ein Beispiel für eine statische vs. dynamische Version einer Abfrage:
Statisch (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
Dynamisch (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)
Wenn Sie weitere Details zu Ihrer aktuellen Tabellenstruktur und dann einige Beispieldaten angeben können. Wir sollten Ihnen dabei helfen können, die Version zu erstellen, die Sie für Ihre Situation benötigen.
Wie ich bereits sagte, ist es manchmal einfacher, mit einer statischen Version zu beginnen, bei der Sie die Spalten, die Sie zuerst transformieren müssen, fest codieren und dann zur dynamischen Version übergehen.