Sì, puoi eseguire un pivot dinamico. A volte è più facile elaborare il PIVOT
query utilizzando prima una versione statica in modo da poter vedere come appariranno la query e i risultati. Quindi trasforma la query in una versione dinamica.
Ecco un esempio di una versione statica e dinamica di una query:
Statico (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
Dinamico (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)
Se puoi fornire maggiori dettagli sulla struttura della tabella corrente e quindi alcuni dati di esempio. Dovremmo essere in grado di aiutarti a creare la versione di cui avresti bisogno per la tua situazione.
Come ho detto però, a volte è più facile iniziare con una versione statica, in cui si codificano prima le colonne che devono essere trasformate, quindi si passa alla versione dinamica.