Да, можете да извършите динамично завъртане. Понякога е по-лесно да се работи с PIVOT
заявка, използвайки първо статична версия, за да можете да видите как ще изглеждат заявката и резултатите. След това преобразувайте заявката в динамична версия.
Ето пример за статична срещу динамична версия на заявка:
Статичен (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
Динамичен (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)
Ако можете да предоставите повече подробности около текущата структура на таблицата и след това някои примерни данни. Трябва да сме в състояние да ви помогнем да създадете версията, която ще ви е необходима за вашата ситуация.
Както казах обаче, понякога е по-лесно да започнете със статична версия, където кодирате твърдо в колоните, които първо трябва да трансформирате, след което преминавате към динамичната версия.