Ja, u kunt een dynamische spil uitvoeren. Soms is het gemakkelijker om de PIVOT
query eerst met een statische versie, zodat u kunt zien hoe de query en de resultaten eruit zullen zien. Zet de query vervolgens om in een dynamische versie.
Hier is een voorbeeld van een statische versus dynamische versie van een zoekopdracht:
Statisch (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
Dynamisch (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)
Als u meer details over uw huidige tabelstructuur kunt geven en vervolgens enkele voorbeeldgegevens. We zouden u moeten kunnen helpen de versie te maken die u nodig heeft voor uw situatie.
Zoals ik al zei, is het soms makkelijker om te beginnen met een statische versie, waarbij je hard codeert in de kolommen die je eerst moet transformeren, en dan doorgaat naar de dynamische versie.