Ano, můžete provést dynamický pivot. Někdy je jednodušší vypracovat PIVOT
dotazujte nejprve pomocí statické verze, abyste viděli, jak bude dotaz a výsledky vypadat. Poté převeďte dotaz do dynamické verze.
Zde je příklad statické vs. dynamické verze dotazu:
Statické (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
Dynamický (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)
Pokud můžete poskytnout více podrobností o vaší aktuální struktuře tabulky a poté některá ukázková data. Měli bychom vám být schopni pomoci vytvořit verzi, kterou byste pro vaši situaci potřebovali.
Jak jsem však řekl, někdy je snazší začít se statickou verzí, kde napevno zakódujete sloupce, které musíte nejprve transformovat, a poté přejděte k dynamické verzi.