请问如何按成绩排名并输出名次?

dippergao 2004-01-12 11:18:54
表结构:
no(学号),name(姓名),score(成绩)
想实现按照成绩排名,并且把名次输出来
成绩相同,名次相同
这样的语句应该怎么写?
...全文
536 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
nffly 2004-01-12
  • 打赏
  • 举报
回复
其中数据库名称为:1.mdb
表名称为:1
nffly 2004-01-12
  • 打赏
  • 举报
回复
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//CN">
<HTML>
<HEAD>
<TITLE>1</TITLE>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">

</HEAD>

<BODY bgcolor="#FFFFFF" leftmargin="0" topmargin="0">
<%on error resume next
Set conn=Server.CreateObject("ADODB.Connection")
con="DBQ="+server.MapPath("1.mdb")+";DefaultDir=;Driver={Microsoft Access Driver (*.mdb)};"
conn.open con
set rs=server.createobject("adodb.recordset")
rs.open "select * from 1 order by score DESC",conn,1,1
for i =1 to rs.recordcount

Response.Write "名字:"&rs("name")&"学号:"&rs("no")&"分数:"&rs("score")&"名次:"&i&"<br>"

rs.movenext
next

rs.close
set conn=nothing
%>
</BODY>
</HTML>
潜水的鱼 2004-01-12
  • 打赏
  • 举报
回复
先用select * from tablename order by score desc取出,

把成绩写入session,判断是否与前条成绩相同,输出名次
jacklinchen 2004-01-12
  • 打赏
  • 举报
回复
1.先用 select * from tablename order by score desc 取出后,在ASP程序中控制排名名次
2.使用存储过程或视图
dippergao 2004-01-12
  • 打赏
  • 举报
回复
非常感谢。
但不知道
为什么要用这句话
aa=1000
i=0
do
直接i=i+1不可以吗?
先结了贴再说
问的太多自己都不好意思啦
windancer 2004-01-12
  • 打赏
  • 举报
回复
最好是在数据库中增名次的字段,录入成绩结束后一次性排名完毕写入数据库
如果每次输出时计算,效率不高尤其在查询频繁时。而且按学号查询也要重新计算。
nffly 2004-01-12
  • 打赏
  • 举报
回复
为了避免每次排序,最好在数据录入后执行名次初始化。然后在选择输出。
nffly 2004-01-12
  • 打赏
  • 举报
回复
另外一个问题就是在数据库中增加一个字段,排名后写入数据库!
然后使用 "select * form table where no='学号'"即可。


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//CN">
<HTML>
<HEAD>
<TITLE>1</TITLE>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">

</HEAD>

<BODY bgcolor="#FFFFFF" leftmargin="0" topmargin="0">
<%on error resume next
Set conn=Server.CreateObject("ADODB.Connection")
con="DBQ="+server.MapPath("1.mdb")+";DefaultDir=;Driver={Microsoft Access Driver (*.mdb)};"
conn.open con
set rs=server.createobject("adodb.recordset")
rs.open "select * from 1 order by score DESC",conn,1,3

'for i =1 to rs.recordcount
'Response.Write "名字:"&rs("name")&"学号:"&rs("no")&"分数:"&rs("score")&"名次:"&i&"<br>"
'rs.movenext
'next
aa=1000
i=0
do

if rs("score")=aa then
i=i
else
i=i+1
end if
if rs.eof then exit do
Response.Write "名字:"&rs("name")&"学号:"&rs("no")&"分数:"&rs("score")&"名次:"&i&"<br>"
aa=rs("score")
rs("mingci")=i
rs.update
rs.movenext

loop
rs.close
set conn=nothing
%>
</BODY>
</HTML>
nffly 2004-01-12
  • 打赏
  • 举报
回复
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//CN">
<HTML>
<HEAD>
<TITLE>1</TITLE>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">

</HEAD>

<BODY bgcolor="#FFFFFF" leftmargin="0" topmargin="0">
<%on error resume next
Set conn=Server.CreateObject("ADODB.Connection")
con="DBQ="+server.MapPath("1.mdb")+";DefaultDir=;Driver={Microsoft Access Driver (*.mdb)};"
conn.open con
set rs=server.createobject("adodb.recordset")
rs.open "select * from 1 order by score DESC",conn,1,1

'for i =1 to rs.recordcount
'Response.Write "名字:"&rs("name")&"学号:"&rs("no")&"分数:"&rs("score")&"名次:"&i&"<br>"
'rs.movenext
'next
aa=1000
i=0
do

if rs("score")=aa then
i=i
else
i=i+1
end if
if rs.eof then exit do
Response.Write "名字:"&rs("name")&"学号:"&rs("no")&"分数:"&rs("score")&"名次:"&i&"<br>"
aa=rs("score")
rs.movenext

loop
rs.close
set conn=nothing
%>
</BODY>
</HTML>
iamsangster 2004-01-12
  • 打赏
  • 举报
回复
排名后写入数据库!
dippergao 2004-01-12
  • 打赏
  • 举报
回复
非常感谢楼上几位朋友的帮助
特别感谢nffly(逆风飞扬)
nffly(逆风飞扬),我还有一个问题想请教:
你的程序实现了输出排名的功能,但是要求成绩相同的学生显示相同的一个名次,这样怎么实现?
还有如果我输入一个学生的学号,能否取得到他的排名?

28,391

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧