日期:2014-05-17  浏览次数:21131 次

求教高手排序问题
我一新手,学做成绩分析时,需把排序写入数据库,使用以下办法写入时
<% '排序降序处理
set conn=Server.Createobject("adodb.connection")
conn.open "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" & Server.MapPath("student.mdb")

Set rsList = server.CreateObject("Adodb.recordset") '存储所有成绩记录
Set rsClass = server.CreateObject("Adodb.recordset") '存储当前班次的记录

sql = "select 语文,班级,成绩,班序,校序 from 学生成绩"
rsList.open sql,conn,1,3

Do While Not rsList.eof
  '按成绩和考试项目进行班级排名次处理
  sql2 = "select DISTINCT 成绩 from 学生成绩 where 成绩> " & rsList("成绩") & " and 语文=" & rsList("语文") & " and 班级=" & rsList("班级")
  rsClass.open sql2,conn,1,1
  rsList("班序") = rsClass.recordcount + 1
  rsList.update
  rsClass.close

  '按成绩和考试项目进行年级排名次处理
  sql2 = "select DISTINCT 成绩 from 学生成绩 where 成绩> " & rsList("成绩") & " and 语文=" & rsList("语文")
  rsClass.open sql2,conn,1,1
  rsList("校序") = rsClass.recordcount + 1
  rsList.update
  rsClass.close

  rsList.movenext
Loop

rsList.close
conn.close
Set rsList = Nothing
Set rsClass = Nothing
Set conn = Nothing
response.write("排序降序处理成绩成功,数据库已安全关闭!")
%>
结果是:
语文 班级 成绩 级位 班位
1 1 34 1 1
1 1 45 2 2
1 1 45 2 2
1 2 67 3 1
1 2 76 4 2
2 1 56 4 3
2 1 45 2 1
2 1 54 3 2
2 2 43 1 1
2 2 76 5 2
这种完全中国式排序,在数据多时不太适合学校里的习惯。学校中更习惯EXCEL中的办法。像以下这样:
姓名 总分 班序 按以上办法的排序
李四 100 1 1
张三 100 1 1
王五 90 3 2
周六 90 3 2
郑七 85 5 3
我想得到第一种排序的结果,即:1,1,3,3,5 而不是上面那种排序:1,1,2,2,3
如高手能赐教,不胜感谢之至!


------解决方案--------------------
1、ACCESS支持内查询
2、如果是多种类别排序的话,比如你例子中的不同的班级进行排序的话可以加入条件,作如下改造
SQL code

select A.姓名,A.总分,A.班级,(select count(*) from tab where 总分>A.总分 and 班级=A.班级)+1 as 排名 from tab as A