WEB开发网
开发学院数据库MSSQL Server SQL2005中利用PIVOT实现分组统计 阅读

SQL2005中利用PIVOT实现分组统计

 2009-10-30 00:00:00 来源:WEB开发网   
核心提示:PIVOT 是SQL Server 2005中新加入的运算符,PIVOT 通过将表达式某一列中的唯一值转换为输出中的多个列来旋转表值表达式,SQL2005中利用PIVOT实现分组统计,并在必要时对最终输出中所需的任何其余列值执行聚合,本篇文章中我们将通过具体的实例来讲解PIVOT的用法及功能,并按姓名升序排列,在传统应

PIVOT 是SQL Server 2005中新加入的运算符,PIVOT 通过将表达式某一列中的唯一值转换为输出中的多个列来旋转表值表达式,并在必要时对最终输出中所需的任何其余列值执行聚合。

本篇文章中我们将通过具体的实例来讲解PIVOT的用法及功能。

注意:对于从低版本(SQL Server 2000)升级到 SQL Server 2005 或更高版本的数据库使用 PIVOT 时,必须将数据库的兼容级别设置为 90 或更高。具体操作可执行下面语句实现:

EXEC sp_dbcmptlevel  数据库名称 ,90

例如:现在有这样一个学生成绩表 [StudentsScore],其中有学生姓名[Student]、学科[Subject]、成绩[Score]三个字段。(结构及数据如下图):

SQL2005中利用PIVOT实现分组统计

要求:按学生姓名[Student]显示各科成绩,并按姓名升序排列。

在传统应用中我们可以通过SELECT...CASE语句达到目的,但是使用SQL Server 2005中新加入的PIVOT运算符将会使代码更简单、更具可读性。下面看看是如何实现的:

declare @Str nvarchar(max)   
set     @str = 'select [Student]'    
select  @str = @str+',['+ Subject + ']' from [StudentsScore] group by [Subject]    
set     @str = @str+' FROM (SELECT [Student],[Score],[Subject] FROM [StudentsScore]) AS T PIVOT(SUM([Score]) FOR [Subject] IN ('  
select  @str = @str+' ['+ Subject + '],' from [StudentsScore] group by [Subject]    
set     @str = left(@str,Len(@str)-1)    
set     @str = @str+ ')) AS thePivot ORDER BY [Student] ASC'  
exec(@str)  

1 2 3  下一页

Tags:SQL 利用 PIVOT

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接