2013-07-03 15 views
2

MS SQL Server 2012的移调一些列使用枢行与SQL

我有一个表称为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 

我试过以下查询没有成功。我收到此错误

Msg 156,Level 15,State 1,Line 10 关键字'for'附近的语法不正确。

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

任何帮助表示赞赏。

回答

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; 

SQL Fiddle with Demo

2

枢轴需要一个聚合函数,因为你可以有原始表中有多个条目。如果你知道每个键只有一个值,那么只需使用MIN()。

而且,“$ ROW1”,“$ 2行”,“$ ROW3”现在列,需要分隔样柱

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

不久我收到你的查询消息156,15级以下错误,状态1,行11 关键字'pivot'附近的语法不正确。 –

+0

我忽略了原始示例中的第三个错误:使用关键字'pivot'作为别名。这可能并不总是会引发错误,但这总是一个坏主意。 – Anon