create table test(id int,name varchar(20),quarter int,profile int) 
insert into test values(1,'a',1,1000)
insert into test values(1,'a',2,2000)
insert into test values(1,'a',3,4000)
insert into test values(1,'a',4,5000)
insert into test values(2,'b',1,3000)
insert into test values(2,'b',2,3500)
insert into test values(2,'b',3,4200)
insert into test values(2,'b',4,5500)select * from test
id name quarter profile
----------- -------------- ----------- -----------
1 a 1 1000
1 a 2 2000
1 a 3 4000
1 a 4 5000
2 b 1 3000
2 b 2 3500
2 b 3 4200
2 b 4 5500(8 row(s) affected)使用PIVOT将四个季度的利润转换成横向显示:select id,name,
[1] as "一季度",
[2] as "二季度",
[3] as "三季度",
[4] as "四季度"
from
test
pivot
(
sum(profile)
for quarter in
([1],[2],[3],[4])
)
as pvtid name 一季度 二季度 三季度 四季度
-------- --------- ----------- -------- ------- -------
1 a 1000 2000 4000 5000
2 b 3000 3500 4200 5500(2 row(s) affected)上面的例子,select id,name,[1] as "一季度",[2] as "二季度",[3] as "三季度",[4] as "四季度" from test pivot(sum(profile) for quarter in([1],[2],[3],[4]))as pvt
运行时报错,
消息 102,级别 15,状态 1,第 1 行
'(' 附近有语法错误。
网上搜了好几个pivot的例子,都报同样的错误,
使用的是sqlserver 2008
请问是哪里出错了?谢谢

解决方案 »

  1.   

    create table test(id int,name varchar(20),quarter int,profile int)  
    insert into test values(1,'a',1,1000)
    insert into test values(1,'a',2,2000)
    insert into test values(1,'a',3,4000)
    insert into test values(1,'a',4,5000)
    insert into test values(2,'b',1,3000)
    insert into test values(2,'b',2,3500)
    insert into test values(2,'b',3,4200)
    insert into test values(2,'b',4,5500)select id ,name,
           [1] as [一季度],
           [2] as [二季度],
           [3] as [三季度],
           [4] as [四季度]
    from
    (
      select * from test a pivot (max(profile) for quarter in ([1],[2],[3],[4])) b
    ) mdrop table test/*
    id          name                 一季度         二季度         三季度         四季度
    ----------- -------------------- ----------- ----------- ----------- -----------
    1           a                    1000        2000        4000        5000
    2           b                    3000        3500        4200        5500(2 行受影响)
    */
      

  2.   


    select id,name,
    [1] as "一季度",
    [2] as "二季度",
    [3] as "三季度",
    [4] as "四季度"
    from
    test AS T
    pivot
    (
    sum(profile)
    for quarter in
    ([1],[2],[3],[4])
    )
    as pvt
      

  3.   

    select id,name,
    [1] as "一季度",
    [2] as "二季度",
    [3] as "三季度",
    [4] as "四季度"
    from test
    pivot (sum(profile) for quarter in ([1],[2],[3],[4]) )
    as pvt--result:
    id          name                 一季度         二季度         三季度         四季度
    ----------- -------------------- ----------- ----------- ----------- -----------
    1           a                    1000        2000        4000        5000
    2           b                    3000        3500        4200        5500(2 行受影响)
      

  4.   

    楼主,你那样用没问题的。
    create table test(id int,name varchar(20),quarter int,profile int)  
    insert into test values(1,'a',1,1000)
    insert into test values(1,'a',2,2000)
    insert into test values(1,'a',3,4000)
    insert into test values(1,'a',4,5000)
    insert into test values(2,'b',1,3000)
    insert into test values(2,'b',2,3500)
    insert into test values(2,'b',3,4200)
    insert into test values(2,'b',4,5500)
      select id ,name,
           [1] as [一季度],
           [2] as [二季度],
           [3] as [三季度],
           [4] as [四季度] from test a pivot (sum(profile) for quarter in ([1],[2],[3],[4])) bdrop table test/*
    id          name                 一季度         二季度         三季度         四季度
    ----------- -------------------- ----------- ----------- ----------- -----------
    1           a                    1000        2000        4000        5000
    2           b                    3000        3500        4200        5500(2 行受影响)*/
      

  5.   

    你要改下 你需要改下你的数据库兼容级别90(sql server2005 以上)
    alter database Northwind SET COMPATIBILITY_LEVEL=100
      

  6.   

    alter database Northwind SET COMPATIBILITY_LEVEL=90
    至少得为90才可以的