请教下 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.
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.
SQL SERVER 2000不支持这两个函数。
这两个函数感觉真不好用...还是老方法比较灵活啊 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