Dim b As New SQLGroupTableBuilder("成绩汇总表","中心小学统考成绩表")
b.C
b.FIlter = DataTables("中心小学统考成绩表").loadFIlter
If Tables("中心小学统考成绩表").FIlter > "" Then
b.FIlter = IIF(b.FIlter > "", b.FIlter & " and ","") & Tables("中心小学统考成绩表").FIlter
End If
b.Groups.AddDef("学校")
b.Groups.AddDef("年级")
b.Groups.AddDef("班级")
b.Groups.AddDef("学科")
b.Groups.AddDef("单元")
b.Groups.AddDef("教师")
b.Totals.AddExp("人数","分数","",AggregateEnum.Count) '统计人数
b.Totals.AddExp("分数分布_50以下","Case When 分数 < 50 Then 1 else 0 End")
b.Totals.AddExp("分数分布_60-50","Case When 分数 >= 50 And 分数 < 60 Then 1 else 0 End")
b.Totals.AddExp("分数分布_70-60","Case When 分数 >= 60 And 分数 < 70 Then 1 else 0 End")
b.Totals.AddExp("分数分布_80-70","Case When 分数 >= 70 And 分数 < 80 Then 1 else 0 End")
b.Totals.AddExp("分数分布_85-80","Case When 分数 >= 80 And 分数 < 85 Then 1 else 0 End")
b.Totals.AddExp("分数分布_90-85","Case When 分数 >= 85 And 分数 < 90 Then 1 else 0 End")
b.Totals.AddExp("分数分布_100-90","Case When 分数 >= 90 And 分数 < 100 Then 1 else 0 End")
b.Totals.AddExp("合格","Case When 分数 >= 60 Then 1 else 0 End")
b.Totals.AddExp("优秀","Case When 年级 = '一年级' And 分数 >= 90 or 年级 = '二年级' And 分数 >= 90 or 年级 = '三年级' And 分数 >= 85 or 年级 = '四年级' And 分数 >= 85 or 年级 = '五年级' And 分数 >= 80 or 年级 = '六年级' And 分数 >= 80 Then 1 Else 0 End" )
b.Totals.AddDef("分数",AggregateEnum.Max,"最高分")
b.Totals.AddDef("分数",AggregateEnum.Min,"最低分")
b.Totals.AddDef("分数",AggregateEnum.sum,"总分")
b.VerticalTotal = True
b.build()
DataTables("成绩汇总表").DataCols.Add("优秀率", Gettype(Double), "[优秀] / [人数]*100")
DataTables("成绩汇总表").DataCols.Add("合格率", Gettype(Double), "[合格] / [人数]*100")
DataTables("成绩汇总表").DataCols.Add("平均分", Gettype(Double), "[总分] / [人数]")
DataTables("成绩汇总表").DataCols.Add("排名_平均分", Gettype(Double))
DataTables("成绩汇总表").DataCols.Add("排名_优秀率", Gettype(Double))
DataTables("成绩汇总表").DataCols.Add("超过总平均人数", Gettype(Double))
MainTable = Tables("成绩汇总表")
Tables("成绩汇总表").SetColVisibleWidth("学校|85|年级|60|班级|40|学科|40|单元|40|人数|40|分数分布_100-90|45|分数分布_90-85|40|分数分布_85-80|40|分数分布_80-70|40|分数分布_70-60|40|分数分布_60-50|40|分数分布_50以下|50|最高分|40|最低分|40|总分|60|平均分|50|合格率|50|优秀率|50|超过总平均人数|50|排名_平均分|45|排名_优秀率|45|教师|60") '按顺序设置宽度,别的隐藏
Dim bjs As List(Of String()) = DataTables("成绩汇总表").GetValues("年级|学科|班级") '如果要按年级(即学校)排名,不能出现"班级"
For Each bj As String() In bjs
'获得该班级的全部行,按总分降序排序
Dim drs As List(Of DataRow) = DataTables("成绩汇总表").Select("[年级] = '" & bj(0) & "'", "平均分 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
Dim njs As List(Of String()) = DataTables("成绩汇总表").GetValues("年级|学科|班级") '如果要按年级(即学校)排名,不能出现"班级"
For Each nj As String() In njs
'获得该班级的全部行,按总分降序排序
Dim drss As List(Of DataRow) = DataTables("成绩汇总表").Select("[年级] = '" & nj(0) & "'", "优秀率 DESC")
For m As Integer = 0 To drss.Count - 1 '遍历所有行
If m > 0 AndAlso drss(m)("优秀率") = drss(m-1)("优秀率") Then '如果总分和上一行相同
drss(m)("排名_优秀率") = drss(m-1)("排名_优秀率") '则排名等于上一行
Else
drss(m)("排名_优秀率") = m + 1 '设置排名
End If
Next
Next
For Each m As Row In Tables("成绩汇总表").rows
For Each r As Row In Tables("成绩汇总表").rows
Dim rs As Integer = DataTables("中心小学统考成绩表").compute("count(分数)","[学校] = '" & r("学校") & "'And [年级] = '" & r("年级") & "' And [班级] = '" & r("班级") & "' And [学科] = '" & r("学科") & "' And [单元] = '" & r("单元") & "'and 分数 >= " & m("平均分") )
r("超过总平均人数") = rs
Next
Next
生成后的:()在这个汇总表中,按语数英排序,所有语文,所有数学、所有英语,这样排序。)
此主题相关图片如下:汇总表.png