问题解决,贴上代码,效率不高,欢迎讨论,讨论2日后结贴,谢谢大家
---------------------------------------------------------
<%
'---------------------------------计算排名
sub count_order()
dim myorder(20)
'--------------------------------------查询计算
sql3 ="select * from tmp order by mark desc " '//按照分数大小查询临时表得出排名的数组
set rs3=server.createobject("adodb.recordset")
rs3.open sql3,conn_tmp,3,3
aResults = rs3.GetRows '//取得数据集
iRows = UBound(aResults, 2) '//记录数
icols = UBound(aResults, 1) '//字段数
%>
<%
dim L
L=1
for m=0 to iRows-1
myorder(m)=L
'response.write aResults(2,m)&"<br>"&"fdfdsf"
If clng(aResults(2,m))-clng(aResults(2,m+1))<>0 then L=L+1 end if
next
rs3.close
set rs3=nothing
'--------------------------------------插入
sql4 ="select * from tmp order by mark desc " '//按照分数大小查询临时表将排名插入临时表
set rs4=server.createobject("adodb.recordset")
rs4.open sql4,conn_tmp,3,3
n=0
while not rs4.eof
rs4("order")=myorder(n)
rs4.movenext
n=n+1
wend
rs4.close
set rs4=nothing
end sub
%>
代码如下:
'-----------------------------------------------------------------------
'将公司、得分、排名存入临时表
set conn_tmp = Server.CreateObject("ADODB.Connection")
DB="../code.mdb"
str="DBQ="+server.mappath(DB)+";DefaultDir=;DRIVER={Microsoft Access Driver (*.mdb)};"
conn_tmp.Open str
sqlstr="select * from tmp order by id asc"
set rs=server.createobject("adodb.recordset")
rs.open sqlstr,conn_tmp,3,3
i=0
while not rs.eof
rs("mark")=mark2(i)
'response.write rs("mark")
rs.movenext
i=i+1
wend
'计算排名
sql1="select * from tmp order by mark asc"
set rs1=server.createobject("adodb.recordset")
rs1.open sql1,conn_tmp,3,3
j=1
while not rs1.eof
'response.write "公司:"&rs1("company")&" 分数:"&rs1("mark")&"<br>"
rs1("order")=j
rs1.movenext
j=j+1
wend
'从临时表中查询排名
sql2="select * from tmp order by id asc"
set rs2=server.createobject("adodb.recordset")
rs2.open sql2,conn_tmp,3,3
k=0
while not rs2.eof
'response.write "公司:"&rs2("company")&" 分数:"&rs2("mark")&" 排名:"&rs2("order")&"<br>"
order(k)=rs2("order")
rs2.movenext
k=k+1
wend
rs.close
set rs=nothing
rs1.close
set rs1=nothing
rs2.close
set rs2=nothing
conn_tmp.close
set conn_tmp=nothing
'-----------------------------------------------------------------
结果如下:
公司:6201 分数:100 排名:13
公司:6202 分数:99.9 排名:15
公司:6203 分数:100 排名:12
公司:6204 分数:100 排名:11
公司:6205 分数:43 排名:14
公司:6221 分数:100 排名:10
公司:6222 分数:100 排名:9
公司:6223 分数:100 排名:8
公司:6224 分数:100 排名:7
公司:6226 分数:100 排名:6
公司:6227 分数:100 排名:5
公司:6228 分数:100 排名:4
公司:6229 分数:100 排名:3
公司:6230 分数:100 排名:2
公司:6215 分数:100 排名:1
------------------------------------------------------
问题如下:
1、为什么排名不是完全正确的?如6205和6202
2、如果分数相同,该如何判定并列名次?
我的笨办法:select * from table order by 分数 desc ,然后将结果写入数组,再从数组中按公司取出显示。要不,更简单点,就是建立个临时表,按分数读取所有记录后,写入临时表,并加上字段排名,然后再按公司读取,就ok了,不过,这样就需要打开数据库两次,如果数据量大,性能受到影响
select GONGSI,FENSHU from table order by GONGSI desc
<%for i=1 to rs.recordcunt
response.write "gongsi,fenshu,paiming"&"<br>"
response.write gongsi&" "&fenshu&" &i&"<br>"
%>