以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]如何进行多层次排名?  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=42405)

--  作者:hrw68529
--  发布时间:2013/11/11 9:08:00
--  [求助]如何进行多层次排名?
如下图:
此主题相关图片如下:面试排名.png
按此在新窗口浏览图片
1、相同职位代码的总成绩,进行面试排名;

2、如果总成绩相同,则看相同职位下的笔试成绩,笔试成绩大的排名在前;

3、如果笔试成绩也相同,则看相同职位代码下的行测成绩,行测成绩大的排名在前,如果行测成绩也相同,则排名相同

下边代码如何修改:

\'获得所有职位代码,保存在集合中

Dim bjs As List(Of String) = Tables("面试成绩_笔试").DataTable.GetUniqueValues("","职位代码")

For Each bj As String In bjs

    \'获得该职位代码的全部行,按总分降序排序

    Dim drs As List(Of DataRow) = Tables("面试成绩_笔试").DataTable.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


--  作者:Bin
--  发布时间:2013/11/11 9:42:00
--  
CurrentTable.Filter=""
CurrentTable.Sort="第一列,第三列"

Dim bjs As List(Of String) = Tables("面试成绩_笔试").DataTable.GetUniqueValues("","职位代码")
For Each bj As String In bjs
    \'获得该职位代码的全部行,按总分降序排序
    Dim drs As List(Of DataRow) = Tables("面试成绩_笔试").DataTable.Select("[职位代码] = " & bj, "总成绩 DESC")
    For n As Integer = 0 To drs.Count - 1 \'遍历所有行
        If n > 0 AndAlso drs(n)("总成绩") = drs(n-1)("总成绩") Then \'如果总分和上一行相同
            If drs(n)("笔试成绩") = drs(n-1)("笔试成绩") Then
                If drs(n)("行测成绩") = drs(n-1)("行测成绩") Then
                    drs(n)("面试排名") = drs(n-1)("面试排名") \'则排名等于上一行
                Else If drs(n)("行测成绩") > drs(n-1)("行测成绩") Then
                    drs(n)("面试排名")=n+2
                    drs(n-1)("面试排名") = n + 1
                Else
                    drs(n)("面试排名") = n + 1 \'设置排名
                End If
            Else If drs(n)("笔试成绩") > drs(n-1)("笔试成绩") Then
                drs(n)("面试排名")=n+2
                drs(n-1)("面试排名") = n + 1
            Else
                drs(n)("面试排名") = n + 1 \'设置排名
            End If
        Else
            drs(n)("面试排名") = n + 1 \'设置排名
        End If
    Next
Next

大概是这样,没有例子没办法测试,不能保证正确性.

--  作者:hrw68529
--  发布时间:2013/11/11 9:56:00
--  
谢谢,我试着做一下,
--  作者:Bin
--  发布时间:2013/11/11 9:58:00
--  
CurrentTable.Filter=""
CurrentTable.Sort="第一列,第三列"

第一第二行代码是误发,自行去掉.
--  作者:hrw68529
--  发布时间:2013/11/11 9:58:00
--  
CurrentTable.Filter=""
CurrentTable.Sort="第一列,第三列"
这段代码是什么意思,需要将第一列、第三列改为标题名吗

--  作者:Bin
--  发布时间:2013/11/11 9:58:00
--  
CurrentTable.Filter=""
CurrentTable.Sort="第一列,第三列"

第一第二行代码是误发,自行去掉.

--  作者:hrw68529
--  发布时间:2013/11/11 10:01:00
--  
谢谢
--  作者:hrw68529
--  发布时间:2013/11/11 10:53:00
--  
我也弄不好了,把系统发给你,请你帮忙解决一下,谢谢
软件如下:代码在面试成绩窗口中的排名按键中
如下:
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:公员面试登分系统_201311081238.rar


--  作者:hrw68529
--  发布时间:2013/11/11 11:24:00
--  
可以解决吗,BIN
--  作者:Bin
--  发布时间:2013/11/11 11:56:00
--  
.
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:面试登分系统.table