以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]成绩排名问题  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=100689)

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


--  作者:有点色
--  发布时间: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
--  发布时间:2017/5/16 19:57:00
--  
图片点击可在新窗口打开查看高人啊,绝对的大神,感谢版主,谢谢,辛苦您了。
--  作者:cqdjr
--  发布时间:2017/5/16 20:04:00
--  
帮助文件里面有一个求及格率和优生率的例子代码,但生成出来的是临时统计表,能不能实现生成永久的统计表呢?
--  作者:有点蓝
--  发布时间:2017/5/16 20:44:00
--  
把代码中临时统计表的名称改为你永久的统计表名称就行
[此贴子已经被作者于2017/5/16 20:43:58编辑过]

--  作者:cqdjr
--  发布时间: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")
蓝版,帮我看一下,怎么改啊,我是小白,不懂啊,谢谢。


--  作者:有点蓝
--  发布时间:2017/5/16 22:32:00
--  
这种方式生成统计表后把数据填充到另外的永久的统计表中


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