MS SQL Server 2012
我有一张名为 indexrows
的表格name displayname propertyvalue
abc $row1 agg
abc $row2 spx
abc $row3 qqq
def $row1 spx
def $row2 qqq
我想将这些结果转换成这样的结果。
name $row1 $row2 $row3
abc agg spx qqq
def spx qqq
我尝试了以下查询但没有成功。我收到此错误
第15行,第15行,第1行,第10行 关键字'for'附近的语法不正确。
select *
from (
select
name,propertyvalue, displayname
from indexrows
) a
PIVOT
(
propertyvalue
for [displayname] in ('$row1', '$row2', '$row3')
) as pivot
感谢任何帮助。
答案 0 :(得分:4)
您的查询存在一些问题。
首先,你在PIVOT上缺少一个聚合函数。您需要约propertyvalue
的汇总。
其次,你需要用方括号括起$row1
等,而不是单引号。
第三,我会为as pivot
结果代码将是:
select *
from
(
select name, propertyvalue, displayname
from indexrows
) a
pivot
(
max(propertyvalue)
for [displayname] in ([$row1], [$row2], [$row3])
) piv;
答案 1 :(得分:2)
PIVOT需要一个聚合函数,因为原始表中可能有多个条目。如果您知道每个键只有一个值,那么只需使用MIN()。
此外,'$ row1','$ row2','$ row3'现在是列,需要像列一样分隔
select *
from (
select
name,propertyvalue, displayname
from indexrows
) a
PIVOT
(
MIN(propertyvalue)
for [displayname] in ([$row1], [$row2], [$row3])
) as pivot