表达式列与后台统计
假定订单表中的金额列是个表达式列,其表达式为:数量 * 单价
如果需要统计不同的产品销售数量和金额,通常可以这样编码:
Dim
g As New GroupTableBuilder("统计表1", DataTables("订单"))
g.Groups.AddDef("产品")
g.Totals.AddDef("数量")
g.Totals.AddDef("金额")
g.Build()
MainTable = Tables("统计表1")
上述统计是针对已经加载的数据,如果需要统计后台数据,很多人会以为将FromServer属性设置为True即可:
Dim
g As New GroupTableBuilder("统计表1", DataTables("订单"))
g.FromServer = True
g.Groups.AddDef("产品")
g.Totals.AddDef("数量")
g.Totals.AddDef("金额")
g.Build()
MainTable = Tables("统计表1")
实际上,当我们在命令窗口执行上面的代码时,会出现错误提示,无法完成统计。
这是因为金额是一个表达式列,只存在于Foxtable中,后台并不存在金额这一列。
显然,此类统计无法直接用GroupTableBuilder完成,只能使用SQLGroupTableBuilder,代码为:
Dim
b As New SQLGroupTableBuilder("统计表1","订单")
b.Groups.AddDef("产品")
b.Totals.AddDef("数量")
b.Totals.AddExp("金额","数量 * 单价")
b.Build
MainTable = Tables("统计表1")
选择后台统计工具的原则是:
1、如果统计数据来自于一个表,且不需要统计表达式列,那么应该采用GroupTableBuilder或CrossTableBuilder。
2、如果统计数据来自于多个表,或者需要统计表达式列,那么只能采用SQLGroupTableBuilder或SQLCrossTableBuilder。