一个经典的统计示例

你可以打开CaseStudy目录下的文件"成绩排名.Table"来验证本节的代码。

假定有下图的成绩表:

希望按班级统计每科的及格人数、及格率、优秀人数和优秀率:

这是一个比较经典的统计示例,需要灵活运用我们之前掌握的多种知识,但代码并不复杂:

Dim b As New SQLGroupTableBuilder("统计表1","成绩表")
b
.Groups.AddDef("班级")
b
.Totals.AddExp("人数","学号","",AggregateEnum.Count) '统计人数
Dim
nms() As String = {"语文","英语","数学","物理","化学"}
For
Each nm As String In nms '利用表达式统计及格人数和优秀人数
   
b.Totals.Addexp(nm & "_
及格", "iif(" &  nm & " >= 60, 1, 0)")
    b.Totals.Addexp(nm &
"_
优秀", "iif(" &  nm & " >= 90, 1, 0)")
Next

b
.VerticalTotal = True
b
.Build()
For
Each nm As String In nms '对生成的统计表增加表达式列,计算及格率和优秀率
    DataTables(
"
统计表1").DataCols.Add(nm & "_及格率",Gettype(Double), nm & "_及格/人数" )
    Tables(
"
统计表1").Cols(nm & "_及格率").Move(Tables("统计表1").Cols(nm & "_及格").Index + 1)
    DataTables(
"
统计表1").DataCols.Add(nm & "_优秀率",Gettype(Double), nm & "_优秀/人数" )
    Tables(
"
统计表1").Cols(nm & "_优秀率").Move(Tables("统计表1").Cols(nm & "_优秀").Index + 1)
    DataTables(
"
统计表1").DataCols(nm & "_及格率").SetFormat("0.00%")
    DataTables(
"
统计表1").DataCols(nm & "_优秀率").SetFormat("0.00%")
Next
MainTable
= Tables("统计表1")

提醒:SQL Server没有iif函数,需要用Case When语句代替,之前已经用具体的例子说明了,这里就不再重复了。


本页地址:http://www.foxtable.com/webhelp/topics/3227.htm