请教下 Pivot 和 Unpivot 的使用案例注: 为什么从网上找了很多的案例,每次执行都报错:
Msg 325, Level 15, State 1, Line 12
Incorrect syntax near 'pivot'. You may need to set the compatibility level of the current database to a higher value to enable this feature. See help for the SET COMPATIBILITY_LEVEL option of ALTER DATABASE.

解决方案 »

  1.   

    需要在SQL SERVER 2005或是2008上才可以。
    SQL SERVER 2000不支持这两个函数。 
      

  2.   

    这两个函数只有sql2005及以上版本才能使用。
      

  3.   


    这两个函数感觉真不好用...还是老方法比较灵活啊 CASE语句..
    两个例子,邹建老大书上的...PIVOT 用于将列值旋转为列,在SQL Server提供此操作符功能之前,一般会采用聚合函数配合CASE语句来实现。
    UNPIVOT的作用与PIVOT相反,它用于把列转换为列值,在SQL Server提供此项功能之前,一般会使用UNION来实现这样的需求。PIVOT和UNPIVOT用于FROM 语句中
    PIVOT的语法:
    table_source --用于PIVOT操作的表或表达式
    PIVOT(--系统或自定义聚合函数做聚合处理
          aggregate_function(value_column) 
          FOR  pivot_column --透视列
          IN (<column_list>) --将成为输出表的列名的值
    )
    ----------
    例如:
    --PIVOT练习:以系统目录视图sys.objects为数据源,以该视图的TYPE列为
    --分组依据,统计TYPE列值为U、V、P、S、F、PK、IT、SQ的记录数,以列的形式展示
    USE master
    GO
    ;WITH
    OBJ AS(
        SELECT TYPE
        FROM sys.objects
    )
    SELECT * 
    FROM OBJ PIVOT(
                   COUNT(TYPE) FOR TYPE IN(U,V,P,S,F,PK,IT,SQ)
                   ) P
    --------------------
    UNPIVOT的语法:
    table_source --用于PIVOT操作的表或表达式
    UNPIVOT(
           value_column 
           FOR  pivot_column --透视列
           IN (<column_list>) --将成为输出表的列名的值
    )
    例如:
    --UNPIVOT练习:以系统目录视图sys.objects为数据源,把以上例题的列再转换为列值
    USE master
    GO
    WITH
    OBJ AS(
        SELECT TYPE
        FROM sys.objects
    ),
    P AS(
      SELECT * 
      FROM OBJ PIVOT(
                     COUNT(TYPE) FOR TYPE IN (U,V,P)
                     )P
    )
    SELECT *
    FROM P  UNPIVOT(
                    [Count] FOR TYPE IN(U,V,P)
                    ) UP