Foxtable(狐表)用户栏目专家坐堂 → [求助]成绩排名问题


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

主题:[求助]成绩排名问题

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


加好友 发短信
等级:婴狐 帖子:46 积分:488 威望:0 精华:0 注册:2016/12/12 22:36:00
[求助]成绩排名问题  发帖心情 Post By:2017/5/16 15:16:00 [只看该作者]

系统里面自带有一个“成绩排名”,它是分班级以总分和各科排名,现在我想要分类:以不同学期、不同年级、不同班级的人以总分和分科分别排名,请问大侠们,该如何才能实现呢?急,求大神指点一下,万分感谢!
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:成绩排名.table


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


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2017/5/16 17:51:00 [只看该作者]

Tables("成绩表").StopRedraw
Dim bjs As List(Of String()) = DataTables("成绩表").GetValues("学期|年级|班级","[班级] Is Not NULL")
Dim Count As Integer
Dim ColNames() As String = {"语文","数学","英语","化学","物理","总分"}
Dim TotalName As String
For Each ColName As String In ColNames
    For Each ary() As String In bjs
        Dim drs As List(Of DataRow) = DataTables("成绩表").Select("学期 = '" & ary(0) & "' and 年级 = '" & ary(1) & "' and 班级 = '" & ary(2) & "'", ColName & " DESC")
        Count = 0
        TotalName = ColName & "排名"
        For n As Integer = 0 To drs.Count - 1
            Count = Count + 1
            If n > 0 AndAlso drs(n)(ColName ) = drs(n-1)(ColName) Then
                drs(n)(TotalName ) = drs(n-1)(TotalName )
            Else
                drs(n)(TotalName ) = Count
            End If
        Next
    Next
Next
Tables("成绩表").Sort = "总分 DESC"
Tables("成绩表").ResumeRedraw

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


加好友 发短信
等级:婴狐 帖子:46 积分:488 威望:0 精华:0 注册:2016/12/12 22:36:00
  发帖心情 Post By:2017/5/16 19:57:00 [只看该作者]

图片点击可在新窗口打开查看高人啊,绝对的大神,感谢版主,谢谢,辛苦您了。

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


加好友 发短信
等级:婴狐 帖子:46 积分:488 威望:0 精华:0 注册:2016/12/12 22:36:00
  发帖心情 Post By:2017/5/16 20:04:00 [只看该作者]

帮助文件里面有一个求及格率和优生率的例子代码,但生成出来的是临时统计表,能不能实现生成永久的统计表呢?

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


加好友 发短信
等级:超级版主 帖子:109720 积分:558310 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2017/5/16 20:44:00 [只看该作者]

把代码中临时统计表的名称改为你永久的统计表名称就行
[此贴子已经被作者于2017/5/16 20:43:58编辑过]

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


加好友 发短信
等级:婴狐 帖子:46 积分:488 威望:0 精华:0 注册:2016/12/12 22:36:00
  发帖心情 Post By:2017/5/16 21:54:00 [只看该作者]

以下是引用有点蓝在2017/5/16 20:44:00的发言:
把代码中临时统计表的名称改为你永久的统计表名称就行
Dim b As New SQLGroupTableBuilder("统计及格优秀2014","成绩2014")
b.C
b.Groups.AddDef("班级")
b.Totals.AddExp("人数","考号","",AggregateEnum.Count) '统计人数
Dim nms() As String = {"语文","数学","英语","政治","历史","地理","物理","化学","生物"}
For Each nm As String In nms '利用表达式统计及格人数和优秀人数
    b.Totals.Addexp(nm & "_及格", " case when " &  nm & " >= 60 Then  1  Else  0  End ")
    b.Totals.Addexp(nm & "_优秀", " case when " &  nm & " >= 90 Then  1  Else  0  End")
Next
b.VerticalTotal = True
b.Build()
For Each nm As String In nms '对生成的统计表增加表达式列,计算及格率和优秀率
    DataTables("统计及格优秀2014").DataCols.Add(nm & "_及格率",Gettype(Double), nm & "_及格/人数" )
    Tables("统计及格优秀2014").Cols(nm & "_及格率").Move(Tables("统计及格优秀2014").Cols(nm & "_及格").Index + 1)
    DataTables("统计及格优秀2014").DataCols.Add(nm & "_优秀率",Gettype(Double), nm & "_优秀/人数" )
    Tables("统计及格优秀2014").Cols(nm & "_优秀率").Move(Tables("统计及格优秀2014").Cols(nm & "_优秀").Index + 1)
    DataTables("统计及格优秀2014").DataCols(nm & "_及格率").SetFormat("0.00%")
    DataTables("统计及格优秀2014").DataCols(nm & "_优秀率").SetFormat("0.00%")
Next
MainTable = Tables("统计及格优秀2014")
蓝版,帮我看一下,怎么改啊,我是小白,不懂啊,谢谢。


 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:109720 积分:558310 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2017/5/16 22:32:00 [只看该作者]

这种方式生成统计表后把数据填充到另外的永久的统计表中


或者直接使用代码生成统计数据

 回到顶部