今天阿德问了一个问题,想把两个表进行连接,表面上看是一个很简单的问题,但是我研究好长时间也没有能写出来,最后借助分区函数将问题解决了
具体问题如下,两个表
班级表: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