Foxtable(狐表)用户栏目专家坐堂 → 老大,遇到个费解的问题,关于排名次的


  共有10323人关注过本帖树形打印复制链接

主题:老大,遇到个费解的问题,关于排名次的

帅哥哟,离线,有人找我吗?
唐尸三摆手
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:928 积分:7769 威望:0 精华:13 注册:2008/9/1 11:58:00
老大,遇到个费解的问题,关于排名次的  发帖心情 Post By:2010/9/29 14:27:00 [只看该作者]

下面是一个典型的应用,在一个成绩表中,包括班级、姓名、总分、总分排名几列数据,希望按班级自动生成总分排名:

'获得所有班级名称,保存在集合中
Dim
bjs As List(Of String) = DataTables("成绩表").GetUniqueValues("","班级")
For Each
bj As String In
bjs
   
'获得该班级的全部行,按总分降序排序

    Dim
drs As List(Of DataRow) = DataTables("成绩表").Select("[班级] = " & bj, "总分 DESC")
   
For n As integer = 0 To drs.Count - 1 '遍历所有行
       
If n > 0 AndAlso drs(n)("总分") = drs(n-1)("总分") Then '如果总分和上一行相同
            drs(n)(
"总分排名") = drs(n-1)("总分排名") '则排名等于上一行
       
Else
            drs(n)(
"总分排名") = n + 1 '设置排名
       
End If
   
Next
Next

 

上面的代码懂了,但是新的问题是:

 

某单位希望做个排号等候系统,按上述代码思路可以给人员进行顺序号分配,但是后面新到的人员在顺序分配号码不能打乱前面的号码,因此在分配时应该排除已分配的顺序号码,请问如何做到?


 回到顶部
帅哥哟,离线,有人找我吗?
程兴刚
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:超级版主 帖子:7235 积分:40556 威望:0 精华:16 注册:2008/8/31 23:23:00
  发帖心情 Post By:2010/9/29 14:36:00 [只看该作者]

上面的代码也应该有逻辑问题:

drs(n)("总分排名") = n + 1 '设置排名
应该更正为:

drs(n)("总分排名") =drs(n-1)("总分排名") + 1 '设置排名

 

否者,当连续出现几个同名次的人员以后,会出现名次断档,如

第1名

第2名

第2名

第4名

第5名
第5名

第5名

第8名

……


 回到顶部
帅哥哟,离线,有人找我吗?
狐狸爸爸
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47448 积分:251054 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2010/9/29 14:48:00 [只看该作者]

一楼的问题只是编号而已,不是排名,应该更简单的。

每次新来一个,就从1开始查找,如果某个数字在现有的编号没有出现,就将此数字作为新来人员的编号。


 回到顶部
帅哥哟,离线,有人找我吗?
唐尸三摆手
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:928 积分:7769 威望:0 精华:13 注册:2008/9/1 11:58:00
  发帖心情 Post By:2010/9/29 15:25:00 [只看该作者]

“有点乱”,,取最后一次的最大编号不可以吗

 回到顶部
帅哥哟,离线,有人找我吗?
狐狸爸爸
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47448 积分:251054 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2010/9/29 15:36:00 [只看该作者]

如果这样,就更简单了,一个DataTables("AAA").Compute(Max("XXX"))就可以搞定。


 回到顶部