Tak, możesz wykonać dynamiczny obrót. Czasami łatwiej jest wypracować PIVOT
zapytanie, używając najpierw wersji statycznej, aby można było zobaczyć, jak będzie wyglądać zapytanie i wyniki. Następnie przekształć zapytanie w wersję dynamiczną.
Oto przykład statycznej i dynamicznej wersji zapytania:
Statyczny (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
Dynamiczny (Skrzypce SQL ):
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)
Jeśli możesz podać więcej szczegółów dotyczących obecnej struktury tabeli, a następnie kilka przykładowych danych. Powinniśmy być w stanie pomóc Ci w stworzeniu wersji potrzebnej w Twojej sytuacji.
Jak już wspomniałem, czasami łatwiej jest zacząć od wersji statycznej, w której na stałe wpisujesz kolumny, które musisz najpierw przekształcić, a następnie przechodzisz do wersji dynamicznej.