Problemet med din nuværende forespørgsel er med linjen:
MAX(SERVER_ID)
Du vil vise PROPERTY_CHAR_VAL
for hver PROPERTY_NAME i stedet.
SERVER_ID
vil være en del af det endelige resultat som en kolonne.
Nogle gange, når du arbejder med PIVOT, er det lettere at skrive koden først med værdierne hårdkodet svarende til:
vælg id, navn1, navn2, navn3, navn4fra( vælg id, ejendomsnavn, ejendomsværdi fra din tabel) dpivot( max(egenskabsværdi) for ejendomsnavn i (navn1, navn2, navn3, navn4)) piv;
Se SQL Fiddle with Demo .
Når du har en version, der har den korrekte logik, så kan du konvertere den til dynamisk SQL for at få resultatet. Dette vil oprette en sql-streng, der vil blive udført, og den vil inkludere alle dine nye kolonnenavne.
ERKLÆR @cols SOM NVARCHAR(MAX), @query AS NVARCHAR(MAX)vælg @cols =TING((SELECT distinct ',' + QUOTENAME(PROPERTY_NAME) fra din tabel FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)') ,1,1,'')set @query ='VÆLG id, ' + @cols + ' fra (vælg id, ejendomsnavn, ejendomsværdi fra din tabel) x pivot ( max(egenskabsværdi) for ejendomsnavn i (' + @cols + ') ) p 'execute sp_executesql @query;
Se SQL Fiddle with Demo . Begge vil give et resultat:
| ID | NAVN1 | NAVN2 | NAVN3 | NAVN4 | NAVN6 ||----|--------|--------|--------|--------|------ --|| 1 | værdi | værdi | værdi | (nul) | (nul) || 2 | (nul) | værdi | (nul) | værdi | (nul) || 3 | (nul) | (nul) | (nul) | (nul) | værdi |