SQLServer2005中,使用分区函数(PARTITION BY),按分区取得最大值

今天阿德问了一个问题,想把两个表进行连接,表面上看是一个很简单的问题,但是我研究好长时间也没有能写出来,最后借助分区函数将问题解决了

具体问题如下,两个表

班级表:Class

字段分别是

C_ID 班级编号
C_Name 班级名称

 

学生表:Student

字段分别是

S_ID 学生编号
S_Name 学生姓名
S_Class 所属班级
S_Score 学生得分

想要建立一个试图,试图包含全部班级的字段和本班级最高分学生的信息,如下:

C_ID 班级编号
C_Name 班级名称
S_ID 学生编号
S_Name 学生姓名
S_Score 学生得分

如果使用传统的方法,势必要使用游标和临时表,(如果哪位仁兄可以通过写一句SQL语句查出来,还请赐教)

使用SQLServer2005中的新特性,PARTITION BY函数,就可以轻松解决了。语句如下:

SELECT * FROM
Class,
(SELECT ROW_NUMBER() OVER (PARTITION BY S_Class ORDER BY S_Score DESC) AS rownum, * FROM Student) AS r
WHERE r.rownum=1 AND C_ID=r.S_Class

posted @ 2009-03-24 15:54  小鲨  阅读(1935)  评论(1)    收藏  举报