有如下表
tblA
ID, CNAME, SCORE
1 A001 80
2 B002 71
3 C003 92
4 E004 80
5 D005 85
想按分数来得到名次,如何实现? Access的SQL语句中没有rownum之类的伪列函数。 不过除了采用程序来实现外,你还可以通过下面SQL查询语句来实现
一、按成绩排序,并列者向下顺延(如下没有第三名,并列两个第四)。
ID CNAME SCORE SNO
3 C003 92 1
5 D005 85 2
4 E004 80 4
1 A001 80 4
2 B002 71 5
select a.ID, a.CNAME, a.SCORE,count(*) as SNO
from tblA a inner join tblA b on a.SCORE<=b.SCORE
group by a.ID, a.CNAME, a.SCORE
order by a.SCORE desc
二、按成绩排序,并列者向上顺延(如下没有第四名,并列两个第三)。
ID CNAME SCORE SNO
3 C003 92 1
5 D005 85 2
4 E004 80 3
1 A001 80 3
2 B002 71 5
select a.ID, a.CNAME, a.SCORE,count(b.ID)+1 as SNO
from tblA a left join tblA b on a.SCORE<b.SCORE
group by a.ID, a.CNAME, a.SCORE
order by a.SCORE desc
三、按成绩排序,并列者以学号大者在先。
ID CNAME SCORE SNO
3 C003 92 1
5 D005 85 2
4 E004 80 3
1 A001 80 4
2 B002 71 5
select a.ID, a.CNAME, a.SCORE,count(*) as SNO
from tblA a inner join tblA b on (a.SCORE<b.SCORE or (a.SCORE=b.SCORE and a.ID<=b.ID))
group by a.ID, a.CNAME, a.SCORE
order by 4
以上为标准SQL查询语句。除此之外,在ACCESS环境中还可以用DCOUNT域函数来实现这个排序号。 用DCOUNT域函数来实现的优点是,这个查询仍为可更新查询。但仅在ACCESS环境中可用。如果你用ADO,DAO通过JET-SQL引擎则不可以了。比如你在ASP中。
一、
select id,CNAME,SCORE,DCOUNT('ID','tblA','SCORE>=' & SCORE) as SNO
from tblA
order by 4
二、
select id,CNAME,SCORE,DCOUNT('ID','tblA','SCORE>' & SCORE)+1 as SNO
from tblA
order by 4
三、
select id,CNAME,SCORE,DCOUNT('ID','tblA','SCORE>' & SCORE & ' OR (SCORE=' & SCORE & ' AND ID>=' & ID & ')' ) as SNO
from tblA
order by 4
http://blog.csdn.net/ACMAIN_CHM/archive/2010/01/03/5125291.aspx
分享到:
相关推荐
注意:对 rownum(伪列) 只能使用 <...如果直接按如下查询得下图结果,显然不正确的,rownum(伪列) 是按查询顺序来排列的,应当先查询筛选排好列,再查询例如上例 查询法; Select rownum,first_name,sa
伪列rownum rownum是查询返回的结果集中行的...从emp表中查询薪水排在前三位的记录 select * from( select * from emp order by sal desc ) where rownum<=3 结果如下: 原创文章 4获赞 4访问量 62 关注 私信
oracle 分页查询 使用ROWNUM技巧及陷阱
可如果用 select rownum,c1 from t1 where rownum > 10 (如果写下这样的查询语句,这时候在您的头脑中应该是想得到表中后面10条记录),你就会发现,显示出来的结果要让您失望了,也许您还会怀疑是不谁删了一些记录,...
ORACLE 中ROWNUM用法总结 整理版本,详细明了
(一)行号显示和排序 1.SQL Server的行号 A.SQL 2000使用identity(int,1,1)和临时表,可以显示行号 SELECT identity(int,1,1) AS ROWNUM, [DataID] INTO #1 FROM DATAS order by DataID; SELECT * FROM #1 B.SQL ...
Oracle中rownum的使用
ORACLE伪列rownum介绍
1.或许有的人会用id+limit来实现上一条,下一条功能.但是.我们试想一下.有的业务并不是用id来排序的.那这样的方法就没效果了. 2.现在找到了生成rownum的方法,并且优化了执行速度. 3.直接上我项目里的sql,希望对大家...
如果需要在查询语句返回的列中包含一列表示该条记录在整个结果集中的行号, ISO SQL:2003 标准提出的方法是提供 ROW_NUMBER() / RANK() 函数。 Oracle 中可以使用标准方法(8i版本以上),也可以使用非标准的 ROWNUM...
本文主要是以实例形式介绍了Oracle查询中rownum与rowid的不同之处,以及以假设的方式为例,查询条件为rownum = 2,在查询出第一条记录时的具体内容的介绍。 在查询中,我们可以注意到,类似于 select xx from ...
oracle rownum和distinct
要在pg中实现rownum我们得先弄清楚oracle中的rownum有什么作用,是如何使用的。 对于rownum来说它是oracle系统顺序分配为从查询返回的行的编号,返回的第一行分配的是1,第二行是2,依此类推,这个伪字段可以用于...
Oracle中实现分页查询的SQL命令 //curPage是当前页面,pageCount是每页显示行数 //rownum是伪列,相当于表中每一列的标识列(可以理解为行号),需要显式的提取出来并取一个别名
在MySQL中,我们通常都使用limit来完成数据集获取的分页操作,而在Oracle数据库中,并没有类似limit一样的方便方法来实现分页,因此我们通常都是直接在SQL语句中完成分页,这里就需要借助于rownum伪列或row_number()...
ORACLE 中ROWNUM用法总结!数据库管理员及程序开发员必看。
sql语句中select top n与oracle的rownum与mysql的limit 取前几条数据sql简单用法
内涵oracle rownum的详细讲解。
目前,很多人想通过ROWNUM取得第N条数据,可以没有办法实现。现在本人有这么一条语句,供大家学习学习。通过ROWNUM取得第二条数据