Jest kilka rzeczy, które są niepoprawne w Twoim zapytaniu.
Po pierwsze, brakuje Ci funkcji agregującej w swoim PIVOT. Potrzebujesz agregatu wokół propertyvalue .
Po drugie, musisz otoczyć $row1 itp. z nawiasami kwadratowymi, a nie pojedynczymi cudzysłowami.
Po trzecie, użyłbym innego aliasu dla as pivot
W rezultacie kod będzie wyglądał następująco:
select *
from
(
select name, propertyvalue, displayname
from indexrows
) a
pivot
(
max(propertyvalue)
for [displayname] in ([$row1], [$row2], [$row3])
) piv;
Zobacz SQL Fiddle z wersją demonstracyjną