MS SQL Server 2012
I have a table called indexrows
name displayname propertyvalue
abc $row1 agg
abc $row2
PIVOTs need an aggregate function, because you could have multiple entries in the original table. If you know you only have one value per key, then just use MIN().
Also, '$row1', '$row2', '$row3' are now columns and need to be delimited like columns
select *
from (
select
name,propertyvalue, displayname
from indexrows
) a
PIVOT
(
MIN(propertyvalue)
for [displayname] in ([$row1], [$row2], [$row3])
) as pivot
There are a few things are wrong with your query.
First, you are missing an aggregate function on your PIVOT. You need an aggregate around propertyvalue
.
Second, you need to surround the $row1
, etc with square brackets not single quotes.
Third, I would use a different alias for the as pivot
As a result the code will be:
select *
from
(
select name, propertyvalue, displayname
from indexrows
) a
pivot
(
max(propertyvalue)
for [displayname] in ([$row1], [$row2], [$row3])
) piv;
See SQL Fiddle with Demo