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

标签 sql pivot sql-server-2012 transpose

微软 SQL 服务器 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

感谢任何帮助。

最佳答案

您的查询有一些问题。

首先,您缺少 PIVOT 上的聚合函数。您需要围绕 propertyvalue 进行聚合。

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

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

结果代码将是:

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

参见 SQL Fiddle with Demo

关于sql - 使用带有 SQL 的数据透视表将一些列转置为行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17458894/

相关文章:

sql - 查询以计算演出收入占所有演出总收入的比例

mysql - 如何在Active关系中创建sql,其中from子句中有子查询

SQL 查询 : SUM on three columns with criteria

sql-server - 是否存在一种方法来验证像 'Abr 21 2010 12:00AM' 这样的字符串是日期时间还是转换为日期时间之后?

sql-server - 一个简单的枢轴但我无法理解它 - 请协助.. :-)

sql - 如何转置表格并将结果分组?

sql - 对季度值进行分组和求和

php - 在单个 MySQL 查询中使用多个临时表(适用于 phpMyAdmin,但不适用于 PHP)

sql - 数据库中用于删除行的主键或常规字段?

php - 拉拉维尔。从数据透视表获取数据