ROWNUM(伪行号)如何在ACCESS查询中实现。

原创 2010年01月03日 18:14:00

很多朋友都碰到这个问题,如果在查询中生成一个行号。比如有如下表
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

ROWNUM与ROW_NUMBER()的体验

主要是在网上看到了一些关于排序分页的帖子,个人感觉有些不妥,就写出SQL进行了测试下,下面列出结果与看法。      通常先排序再分页都是使用ROWNUM伪列,通过将查询结果先进行排序,再使用两层SQ...
  • cnham
  • cnham
  • 2010年04月20日 17:21
  • 2048

Access中取行号

1.Access中,没有类似Oracle的RowNum()之类的直接取行号的函数;2.可以写的SQL(表asm_cj_dlmxb_single_0,其中有字段partnumber):   select...
  • Yang_Seal
  • Yang_Seal
  • 2010年07月23日 15:36
  • 8402

在access的报表中自动输出行号

access 行号 自动 名次
  • laomai
  • laomai
  • 2010年07月12日 11:42
  • 2024

access数据库在没有自增字段情况下选出指定行号的若干行记录

语句如下:select * from (select top BEGROWNUM-1 * from (select top ENDROWNUM  id,age from person) order b...
  • cadinfo
  • cadinfo
  • 2010年12月10日 19:44
  • 965

vba 自动编号字段 row_number counter

SELECT a.ID, a.AText, (SELECT Count(ID) FROM table1 b WHERE b.ID
  • xcntime
  • xcntime
  • 2014年12月21日 14:08
  • 1113

ROWNUM(伪行号)如何在ACCESS查询中实现。

很多朋友都碰到这个问题,如果在查询中生成一个行号。比如有如下表tblA   ID, CNAME, SCORE1   A001   802   B002   713   C003   924   E00...
  • ACMAIN_CHM
  • ACMAIN_CHM
  • 2010年01月03日 18:14
  • 18720

vb.net+access+datagirdview

  • 2015年01月25日 16:24
  • 310KB
  • 下载

ROWNUM(伪行号)如何在ACCESS查询中实现。

很多朋友都碰到这个问题,如果在查询中生成一个行号。比如有如下表 tblA    ID, CNAME, SCORE 1   A001   80 2   B002   71 3   C003  ...
  • chengmodelong
  • chengmodelong
  • 2014年06月24日 10:29
  • 190

利用Oracle伪例-ROWNUM实现分页

最近接触了Oracle的项目。突然发现它没有像MySQL那样的limit实现分页,查询一番,才知道可以用Oracle的伪例(ROWNUM)实现分页。此篇讲简单介绍利用ROWNUM实现Oracle分页。...
  • lpx12301124
  • lpx12301124
  • 2016年08月05日 00:01
  • 661

mysql 获取行号 rownum

【一条sql语句完成,不set变量】SELECT @rownum:=@rownum+1 AS rownum, frutas.* FROM (SELECT @rownum:=0) r, frutas; ...
  • wscrf
  • wscrf
  • 2018年02月10日 13:02
  • 9
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ROWNUM(伪行号)如何在ACCESS查询中实现。
举报原因:
原因补充:

(最多只允许输入30个字)