以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  如何根据两个表数据进行条件求和后并相除?  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=12844)

--  作者:风也劲
--  发布时间:2011/9/17 14:31:00
--  如何根据两个表数据进行条件求和后并相除?

根据“投入产出”与“成本费用”两表来设计:

1.如何设计求出2010年“吨料费用”?(即:2010年费用(求和)/1102投入总用量(吨)(求和)

2.求2011年6月的费用大项中“制造费用”的吨料费用?

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:吨料耗用.rar

[此贴子已经被作者于2011-9-17 14:39:57编辑过]

--  作者:don
--  发布时间:2011/9/17 14:41:00
--  

Compute

根据指定的表达式和条件进行计算,语法:

Compute(Expression, Filter)

语法:

Compute(Expression, Filter)

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

例如,我们要统计订单表中产品PD01的销售金额,代码如下:

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

还记得吗? DataTable也有Compute方法,两者功能一样,但是DataTable的Compute方法统计所有行,而Table的Compute方法只会统计Table中可见的行。
所以如果没有进行筛选,那么两者的统计结果是一样的,如果进行了筛选,就需要根据具体情况选用了。

例如你在订单表中筛选出了客户CS01的所有行,那么:

Dim Sum1 As Double = Tables("订单").Compute("Sum(数量)")
Dim
Sum2 As Double = DataTables("订单").Compute("Sum(数量)")

Sum1将等于客户CS01的订购数量,而Sum2将等于所有客户的订购数量。

同样:

Dim Sum1 As Double = Tables("订单").Compute("Sum(数量)", "产品 = \'PD01\'")
Dim
Sum2 As Double = DataTables("订单").Compute("Sum(数量)", "产品 = \'PD01\'")

Sum1将等于客户CS01订购产品PD01的数量,Sum2将等于所有客户订购产品PD01的数量。


--  作者:风也劲
--  发布时间:2011/9/17 15:53:00
--  
麻烦帮忙设置下?
--  作者:狐狸爸爸
--  发布时间:2011/9/18 9:45:00
--  
我没有看懂楼主的问题。
--  作者:风也劲
--  发布时间:2011/9/18 11:11:00
--  
例如:我想求2010年度的平均一吨料的“制造费用”,就是用2010年总 ”制造费用” 除以2010年 “总投入量”,即用“成本费用”表中“制造费用”(条件:[费用大项]=\'制造费用\' and  年=2010),除以”投入产出“表中”项目“列”1102投入总用量(吨)“(条件:[项目]=‘1102投入总用量(吨)’,日期是2010年)。要达到目的:能统计每一项目每一时间段的吨料费用。
--  作者:程兴刚
--  发布时间:2011/9/18 11:23:00
--  

您的文件无法下载,看不到投入产出表相关列名称,请修改“数量”为您要统计的投入产出表的那一列的名称,大概这样:

 

Tables("成本费用").Compute("Sum(制造费用)", "费用大项 = \'制造费用\' and 年 = 2010")/Tables("投入产出").Compute("Sum(数量)", "项目 = \'1102投入总用量(吨)\' and 日期 > #2009-12-31# and 日期 < #2011-01-01#")


--  作者:程兴刚
--  发布时间:2011/9/18 11:25:00
--  

如果成本费用表的“年”列为字符型,则为这样:

 

Tables("成本费用").Compute("Sum(制造费用)", "费用大项 = \'制造费用\' and 年 = ‘2010’")/Tables("投入产出").Compute("Sum(数量)", "项目 = \'1102投入总用量(吨)\' and 日期 > #2009-12-31# and 日期 < #2011-01-01#")


--  作者:风也劲
--  发布时间:2011/9/18 12:58:00
--  

命令窗口输入如下,能显示6655.55614497875

Dim Sum1 As Double

Dim Sum2 As Double

Dim Sum3 As Double

Sum1 = Tables("成本费用").Compute("Sum(金额)", "费用大项 = \'制造费用\' And 日期>=#2010-01-01# And 日期<#2011-01-01#")

Sum2 = Tables("投入产出").Compute("Sum(数据)", "项目 = \'1102投入总用量()\' And 日期>=#2010-01-01# And 日期<#2011-01-01#")

Sum3=Sum1/Sum2

Output.Show(Sum3)



--  作者:风也劲
--  发布时间:2011/9/18 12:59:00
--  
但在表达式列输入:Tables("成本费用").Compute("Sum(金额)""费用大项 = \'制造费用\' And 日期>=#2010-01-01# And 日期<#2011-01-01#")/Tables("投入产出").Compute("Sum(数据)""项目 = \'1102投入总用量()\' And 日期>=#2010-01-01# And 日期<#2011-01-01#")

就出现错误提示:表达式错误,如果确认表达式无语法错误。。。。。


[此贴子已经被作者于2011-9-18 13:07:27编辑过]

--  作者:程兴刚
--  发布时间:2011/9/18 13:19:00
--  
表达式列只能用表达式,不能直接用代码,请细看帮助!