假设有表如下(仅作示例):
create table dbo.Score
(
ScoreId int identity(1,1)
, Student nvarchar(max)
, SubjectId nvarchar(max)
, ScoreNumber int
)
insert into Score values('A', '数学', 96)
insert into Score values('A', '语文', 90)
insert into Score values('A', '程序设计', 77)
insert into Score values('B', '数学', 76)
insert into Score values('B', '语文', 66)
insert into Score values('B', '程序设计', 88)
insert into Score values('C', '数学', 60)
insert into Score values('C', '语文', 80)
insert into Score values('C', '程序设计', 66)
要求对每个学科中分数进行排序,如下图:
可用SQL Server 2005中新的function:
select Student
, SubjectId
, ScoreNumber
, row_number() over (partition by SubjectId order by ScoreNumber desc) as [Rank]
from Score
加上where 语句可以筛选出每学科前几名学生。