假设有表如下(仅作示例):

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 语句可以筛选出每学科前几名学生。