以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  表事件里不能使用聚合函数吗?  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=11045)

--  作者:Tommy
--  发布时间:2011/7/5 17:00:00
--  表事件里不能使用聚合函数吗?

我在子表的DataColChanged事件里写了一行这样的代码:

e.DataRow.GetParentRow("主表")("Total") = Sum(DataTables("子表").DataRows("Amount"))

按确定时报错了:  编译错误:Name "Sum" is not declared.

表事件里不能使用聚合函数吗?有什么好的解决方法?


--  作者:hhbb
--  发布时间:2011/7/5 17:03:00
--  

Compute

根据条件统计表中数据。

语法:

Compute(Expression, Filter)

Expression: 要计算的表达式,使用聚合函数进行统计。
Filter:    可选参数,用于设置计算条件,
请参考表达式的运算符和函数条件表达式

在执行以下示例之前,请打开CaseStudy目录下的示例文件"统计演示.Table"。

示例一

计算总的销售数量和金额:

Dim Total As Integer
Dim
Amount As Double
With
DataTables("订单")
    Total = .Compute(
"Sum(数量)")
    Amount = .Compute(
"Sum(金额)")
End
With
Output.Show(
"数量:" & Total)
Output.Show(
"金额:" &
Amount)

示例二

计算产品PD01的销售数量:

Dim Total As Long
Total =
DataTables("订单").Compute("Sum(数量)", "产品 = \'PD01\'"
)
Output.Show(Total)

示例三

计算每个客户的订购数量:

Dim dt As DataTable = DataTables("订单")
Dim
Total As Integer
Dim
Customers As List(Of String)
Customers = dt.GetUniqueValues("",
"客户")
For Each
Customer As String In Customers
    Total = dt.Compute("Sum(数量)", "[客户] = \'" & Customer & "\'")
    Output
.Show(Customer & ":" & Total
)
Next

上述代码中,Filter参数分成了三部分,各部分用运算符&连接起来:

"[客户] = \'" & Customer & "\'"

如果客户名称为CS01,那么三部分组合后,Filter参数就等于:

"[客户] = \'CS01\'"

通过代码动态合成条件表达式,是一种基本的技能,大家务必要掌握。