最近在学习2005 的 pivot时遇到这样的问题,语句
select * from temppivot
pivot 
(
sum(sales) 
for year in ([2000],[2005])
)t执行后抱错: 
服务器: 消息 102,级别 15,状态 1,行 4
'(' 附近有语法错误。但是在别的机子 2005环境下则没有此错误提示请各位强人解惑,  不知是否与 兼容机别有关? 我的兼容级别是2000(80)

解决方案 »

  1.   

    create table temppivot (make varchar(100),year int,sales int)insert into  temppivot values('a','2000','100' ) insert into  temppivot values('a','2005','3500' ) 
    insert into  temppivot values('b','2000','500' ) 
    insert into  temppivot values( 'b','2005','700') 
    insert into  temppivot values('d','2000','800') 
    insert into  temppivot values('d','2005','800'  ) 
    select * from temppivot
    pivot 
    (
    sum(sales) 
    for year in ([2000],[2005])
    )t
      

  2.   

    select   *   from   temppivot 
    pivot   

    sum(sales)   
    for   year   in   ('2000','2005') 
    )t
      

  3.   

    如果兼容级别是80 的话,是不是所有的2005 的新增的功能都不能用,比如说 pivot,cte,rank,dense_rank........
      

  4.   

    没有问题,
    create   table   temppivot   (make   varchar(100),year   int,sales   int) insert   into     temppivot   values('a','2000','100'   )   insert   into     temppivot   values('a','2005','3500'   )   
    insert   into     temppivot   values('b','2000','500'   )   
    insert   into     temppivot   values(   'b','2005','700')   
    insert   into     temppivot   values('d','2000','800')   
    insert   into     temppivot   values('d','2005','800'     )   
    select   *   from   temppivot 
    pivot   

    sum(sales)   
    for   year   in   ([2000],[2005]) 
    )t/*
    make                                                                                                 2000        2005
    ---------------------------------------------------------------------------------------------------- ----------- -----------
    a                                                                                                    100         3500
    b                                                                                                    500         700
    d                                                                                                    800         800(3 row(s) affected)
    */drop table temppivot
      

  5.   

    无枪狙击手
    select       *       from       temppivot   
    pivot       
    (   
    sum(sales)       
    for       year       in       ('2000','2005')   
    )t
    --------------------------
    一样抱错;服务器:   消息   102,级别   15,状态   1,行   4 
    '('   附近有语法错误
      

  6.   

    如果兼容级别是80   的话,是不是所有的2005   的新增的功能都不能用,比如说   pivot,cte,rank,dense_rank........对,要改为90
      

  7.   

    do熊
    -------------
    可是,在我的2005上是抱错的, 不知道是否与兼容级别有关,因为我从2000的bak 在2005上恢复的时候 选择的兼容级别是80
      

  8.   


    在80兼容模式下,字段做参数的语句不能运行,如pivot, Outer Apply等,
    其他如Row_number() Rank()等正常使用
      

  9.   

    zefuzhang-------------
    因为业务的关系,数据库不能长时间的停机,如果我现在把兼容级别直接修改为90的话,会不会有什么问题(前不久刚用2000 的bak 在2005上作的恢复)?
      

  10.   

    其实你写的那个pivot语句在80模式下也有实现的方式,就是通常的行列转换,
    论坛里搜下有很多
    至于更改兼容模式,建议你在非数据库访问高峰时更改,具体什么后果我也不大清楚,没做过
      

  11.   


    这个问题解决了没有呢?我的也是这样子pivot语句运行没有问题,改为动态sql就会出错