以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  分组统计的问题  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=18974)

--  作者:zenqee
--  发布时间:2012/4/23 21:55:00
--  分组统计的问题

烦请问:

分组统计生成的的临时表中,能否通过手工编码,增加一个表达式列并直接出结果?

 

例如:

 

\'定义一个GroupTableBuilder,名称为"统计表1",对订单表进行统计。
Dim
b As New GroupTableBuilder("统计表1",DataTables("订单"))

 


b.Filter = "[客户] = \'CS01\'" \'仅统计客户为CS01的记录

b.Groups.AddDef("产品") \'根据产品分组

b.Totals.AddDef("数量") \'对数量进行统计

 

(这里代码如何写:要得到一个"金额"列,是“数量列*单价列”而计算出来的)


b.Build \'生成统计表

MainTable = Tables("统计表1") \'打开生成的统计表

 


--  作者:程兴刚
--  发布时间: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。


--  作者:zenqee
--  发布时间:2012/4/24 21:54:00
--  回复:(zenqee)分组统计的问题

请问程老师:

 

前面的问题中表达式列是    金额=数量 * 单价 ,

分组统计时用    b.Totals.AddExp("金额","数量 * 单价 )
那么,  统计的这列金额是采用下列哪种算法得出的?

 

1、金额 = 数量1*单价1 + 数量2*单价2

2、金额 = (数量1+数量2)* (单价1+单价2) 

 

 

如果是第一种,那我要统计第二种结果(我只是举例,事实上不会这么算),也就是要先分组统计数量和单价的和再相乘,该如何编码?

 

谢谢!


--  作者:狐狸爸爸
--  发布时间:2012/4/24 22:01:00
--  

数量1*单价1 + 数量2*单价2

 

如果要第二种,分别统计出数量和单价的累计值,然后用代码给统计表增加一个表达式列,表达式为: 数量 * 单价

[此贴子已经被作者于2012-4-24 22:02:41编辑过]