Foxtable(狐表)用户栏目专家坐堂 → 分组统计的问题


  共有8221人关注过本帖树形打印复制链接

主题:分组统计的问题

帅哥哟,离线,有人找我吗?
程兴刚
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:超级版主 帖子:7258 积分:40773 威望:0 精华:16 注册:2008/8/31 23:23:00
  发帖心情 Post By:2012/4/23 22:24:00 [显示全部帖子]

表达式列与后台统计

假定订单表中的金额列是个表达式列,其表达式为:数量 * 单价

如果需要统计不同的产品销售数量和金额,通常可以这样编码:

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。


 回到顶部