以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  请教高手排列名次问题?  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=26374)

--  作者:qhyp
--  发布时间:2012/12/2 1:04:00
--  请教高手排列名次问题?

已前是易表用户,刚接触狐表,请高手们指点一下。想实现按总成绩高低排名次,如果总成绩相同,则以专业成绩高低排名次,然后按照招聘岗位数的3倍标示“进入面试”人员,其中考试成绩为“-1”的为笔试缺考人员,不能标示为进入面试。

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:成绩排名次.table


--  作者:sloyy
--  发布时间:2012/12/2 11:17:00
--  
我是不是可以理解为 按 报考职位代码,总成绩(降序),专业成绩(降序) 排序  ,然后按岗位数X3标示 ?
--  作者:qhyp
--  发布时间:2012/12/2 11:32:00
--  

楼上说的完全正确,按岗位数的1:3的比例来标示,不足1:3比例的全部要标示,特殊情况如果总成绩为“-1”,也就是缺考,则不标示。还有一种情况比较麻烦,比如岗位数为1个,按3倍应有3个人被标示,但如果第3名有n(n>=1)个人总成绩相同,那么应标示的就有2+n个人,即第1名(1个)、第2名(1个)、第3名(n个);如果第2名有n(n>=2)个人总成绩相同,那么应标示的是1+n个人,即第1名(1个)和第2名(n个)。


--  作者:sloyy
--  发布时间:2012/12/2 12:09:00
--  

Tables("成绩表").Sort= "报考职位代码,总成绩 DESC,专业成绩 DESC"
DataTables("成绩表").Save
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,专业成绩 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
           If N=0 Then
             drs(n)("总成绩名次") = 1
            Else
            drs(n)("总成绩名次") = drs(n-1)("总成绩名次")+1   \'设置排名
            End If
        End If

        If  drs(n)("总成绩名次")<  drs(n)("招聘岗位数")*3  And  drs(n)("专业成绩")>-1 And  drs(n)("公共成绩")>-1  Then
            drs(n)("面试标示")="进入面试"
        Else
            drs(n)("面试标示")=""
        End If
       
    Next
Next


--  作者:qhyp
--  发布时间:2012/12/2 13:06:00
--  

十分感谢楼上热情帮助,我也测试了一下,基本达到要求。下面这一句要改成“<=”才可以,要不然总少一个人。

If drs(n)("总成绩名次")< drs(n)("招聘岗位数")*3 And drs(n)("专业成绩")>-1 And drs(n)("公共成绩")>-1 Then
最后再次表示感谢!!