MS SQL Server 2012
I have a table called indexrows
name displayname propertyvalue
abc $row1 agg
abc $row2 spx
abc $row3 qqq
def $row1 spx
def $row2 qqq
I would like to transpose these results to look like this.
name $row1 $row2 $row3
abc agg spx qqq
def spx qqq
I tried the following query without success. I get this error
Msg 156, Level 15, State 1, Line 10 Incorrect syntax near the keyword 'for'.
select *
from (
select
name,propertyvalue, displayname
from indexrows
) a
PIVOT
(
propertyvalue
for [displayname] in ('$row1', '$row2', '$row3')
) as pivot
Any help is appreciated.
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;
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
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.