使用数据透视和 SQL 将一些列转置为行

Jay*_*y C 2 sql transpose pivot sql-server-2012

微软 SQL Server 2012

我有一个名为indexrows的表

name    displayname propertyvalue
abc      $row1        agg
abc      $row2        spx
abc      $row3        qqq
def      $row1        spx
def      $row2        qqq
Run Code Online (Sandbox Code Playgroud)

我想将这些结果转置成这样。

name    $row1   $row2   $row3
abc      agg    spx    qqq
def      spx    qqq 
Run Code Online (Sandbox Code Playgroud)

我尝试了以下查询但没有成功。我收到这个错误

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

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

任何帮助表示赞赏。

Tar*_*ryn 5

您的查询有一些问题。

首先,您在 PIVOT 上缺少聚合函数。你需要一个围绕propertyvalue.

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

第三,我会使用不同的别名 as pivot

因此,代码将是:

select * 
from 
(
  select name, propertyvalue, displayname
  from indexrows
) a
pivot
(
  max(propertyvalue)
  for [displayname] in ([$row1], [$row2], [$row3])
) piv;
Run Code Online (Sandbox Code Playgroud)

参见SQL Fiddle with Demo