Ya, Anda dapat melakukan pivot dinamis. Terkadang lebih mudah untuk mengerjakan PIVOT
kueri menggunakan versi statis terlebih dahulu sehingga Anda dapat melihat bagaimana kueri dan hasilnya akan muncul. Kemudian ubah kueri menjadi versi dinamis.
Berikut adalah contoh kueri versi statis vs. dinamis:
Statis (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
Dinamis (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)
Jika Anda dapat memberikan detail lebih lanjut tentang struktur tabel Anda saat ini dan kemudian beberapa data sampel. Kami seharusnya dapat membantu Anda membuat versi yang Anda perlukan untuk situasi Anda.
Seperti yang saya katakan, terkadang lebih mudah untuk memulai dengan versi statis, di mana Anda membuat kode keras di kolom yang perlu Anda ubah terlebih dahulu, lalu beralih ke versi dinamis.