一条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
现建立课程表 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
相关文章推荐
- 一条sql语句,查询出全部分类各前10记录
- 一条sql语句,查询出全部分类各前10记录
- 使用传入的总记录数实现一条sql语句完成分页查询
- SQL 语句 一对多关系,根据一查询多里面对应一的最新的一条记录
- Oracle 删除重复数据只留一条 查询及删除重复记录的SQL语句 1、查找表中多余的重复记录,重复记录是根据单个字段(Id)来判断 select * from 表 wher
- 关于SQL语句查询最近联系人聊天记录(即最近一条消息)
- Mysql查询最近一条记录的sql语句(优化篇)
- 常用的文章系统,如何用一条sql语句提取出每个分类的第一条并按OrderCol字段排序。分类大概几十个,一共只要取top 10 这样
- Oracle 删除重复数据只留一条 查询及删除重复记录的SQL语句 1、查找表中多余的重复记录,重复记录是根据单个字段(Id)来判断 select * from 表 wher
- 数据库中随机查询一条记录的SQL语句
- 转载:如何写个SQL语句查询一个字段里是否有重复记录如果有只读取其中一条记录
- SQL根据Id来查询一条记录或全部记录
- 一条sql搞定从查询语句中向目标表中插入记录并去重发插入
- 关于获取每一条查询语句的记录数的方法总结
- 跨服务器,跨数据库,多表联合查询 / 如何用sql语句来查询表中哪些记录是重复的
- 绝对经典sql语句查询分类前几条信息 ,并按某字段排序
- 查询表内多字段同时重复记录的SQL语句
- SQL SERVER:一条SQL语句插入多条记录等
- 利用标准SQL语句实现查询记录分页
- SQLite一条SQL语句插入多条记录失败的问题