小编典典

使用带有SQL的数据透视表将某些列转置为行

sql

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

我尝试了以下查询,但未成功。我得到这个错误

消息156,级别15,状态1,第10行关键字“ for”附近的语法错误。

select * 
from (
select 
name,propertyvalue, displayname
from indexrows
) a
PIVOT 
(
propertyvalue
for [displayname] in ('$row1', '$row2', '$row3')
) as pivot

任何帮助表示赞赏。


阅读 251

收藏
2021-04-07

共1个答案

小编典典

您的查询有些错误。

首先,您在PIVOT上缺少聚合函数。您需要一个汇总propertyvalue

其次,您需要$row1用方括号而不是单引号将。等括起来。

第三,我将为 as pivot

结果,代码将是:

select * 
from 
(
  select name, propertyvalue, displayname
  from indexrows
) a
pivot
(
  max(propertyvalue)
  for [displayname] in ([$row1], [$row2], [$row3])
) piv;
2021-04-07