一个经典的统计示例
你可以打开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语句代替,之前已经用具体的例子说明了,这里就不再重复了。