您的位置:首页 > 数据库

一条sql语句,查询出全部分类各前10记录

2009-05-08 15:46 603 查看
如一班级成绩表

现建立课程表 tableA

sid sname

1 语文

2 数学

3 英语

.......

在建学生成绩库 tableB

id sid fen name

1 1 100 张三

2 1 89 李四

3 1 95 王五

4 2 89 张三

5 3 78 王五

6 2 99 王五

.....

现使用

可以显示出所有科目前10名单

select a.sid,sname,id,fen,name from tableA a inner join

(select * from tableB b

where id in(

select top 10 id from tableB where sid=b.sid

order by fen desc)) as b

on a.sid=b.sid

order by a.sid,fen desc


SELECT sid, sname, fen,name

FROM (SELECT px =

(SELECT COUNT(1) + 1

FROM tableB

WHERE sid = b.sid AND fen > b.fen), a.sid, a.sname, b.fen,b.name

FROM tableA a JOIN

tableB b ON a.sid = b.sid) t

WHERE (px <= 10)

ORDER BY sid, fen DESC

在放个测试用的

declare @tableA table(sid int ,sname varchar(20))

insert @tableA select 1,'语文'

union all select 2,'数学'

union all select 3,'英语'

declare @tableB table(id int,sid int ,fen int)

insert @tableB select 1,1,80

union all select 1,2,80

union all select 2,1,80

union all select 3,2,70

union all select 4,1,55

union all select 5,2,69

union all select 6,2,69

union all select 7,2,69

union all select 8,2,69

union all select 9,2,69

union all select 10,2,69

union all select 11,2,69

union all select 12,2,69

union all select 13,2,69

union all select 14,3,69

select a.sid,sname,id,fen from @tableA a inner join

(select * from @tableB b

where id in(

select top 10 id from @tableB where sid=b.sid

order by fen desc)) as b

on a.sid=b.sid

order by a.sid,fen desc
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐