以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  跨表数据统计  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=16736)

--  作者:土佛
--  发布时间:2012/2/22 11:29:00
--  跨表数据统计

狐爸及各位论友们好:

我现有一仓库与发货之间的跨表数据问题,由于编程知识的薄弱,这个问题搞了我好多天,头都大的不行了,现求助大家了,具体见附件。问题都在上传表的最后一列备注里

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目1.table


--  作者:狐狸爸爸
--  发布时间:2012/2/22 11:35:00
--  

玩不转代码,就用表达式,看看下面的内容:

 

有条件统计子表数据

 

首先必须说明的是,通过聚合函数统计子表数据,只能是无条件的。
但是实际应用的时候,有条件的统计是非常普遍的,怎样才能实现条件统计呢?
下面用一个简单的例子来说明。

假定有产品和订单两个表:

 

图片点击可在新窗口打开查看

 

图片点击可在新窗口打开查看

 

这两个表通过产品编号建立了关联,假定关联的名称是"po",现在要求产品表能够自动统计出总销量、总销售额、已收款金额、未收款金额。
显然,按照常规的方法,是没有办法统计已收款金额和未收款金额的,但是我们可以绕个弯,在订单表增加一个表达式列,名称为“已付款金额”,将其表达式设置为:

 

IIF([已付款] = True,[金额],Null)

 


图片点击可在新窗口打开查看此主题相关图片如下:1699.gif
图片点击可在新窗口打开查看

 

现在可以设置产品表中各列的表达式了:

 

列名 表达式
总销量 Sum(Child(po).数量)
总销售额 Sum(Child(po).金额)
已收款金额 Sum(Child(po).已付款金额)
未收款金额 [总销售额] - [已收款金额]

 


[此贴子已经被作者于2012-2-22 11:35:18编辑过]

--  作者:土佛
--  发布时间:2012/2/22 12:00:00
--  

狐爸老师,首先感谢你的耐心教导!

     对于我来讲,我其实一直都是能用表达式就不会用代码,问题是确实碰到了很多的问题没有办法用表达式解决。

     上面的举例在狐表的帮助里我也看了,在一定程度上,有条件统计确实好用,但是,如果碰到付款付一部分或者说付款分多次付,您不能说没有这样的事情发生吧,就没有了办法,至少我现在没有办法。而我上面给的附件里就有类似的现象。麻烦老师了


--  作者:狐狸爸爸
--  发布时间:2012/2/22 13:33:00
--  

二楼的例子,帮助根本没有,你看仔细点。


--  作者:土佛
--  发布时间:2012/2/22 20:50:00
--  

可能是我看错了,很对不起!

     不过,如果按狐爸的方法处理多次付款的话我确实不知道该怎么办。望狐爸赐教!


--  作者:狐狸爸爸
--  发布时间:2012/2/22 21:22:00
--  

多次付款的话,更加自然了:

  

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:关联表的数据引用和统计.table


--  作者:土佛
--  发布时间:2012/2/22 21:56:00
--  
狐爸这么晚还没睡呀?!先多谢了,今天下午我夫人病了,陪她去医院,所以现在才答复你,很抱歉
--  作者:土佛
--  发布时间:2012/2/22 22:07:00
--  

狐爸,如果说我真的想要跨表统计数据代码的话其实意思也很简单:

     A表中 符合两个条件(客户,产品)的 总数量=A表中符合两个条件(客户,产品)的 [入数量]总和-B表中符合两个条件(客户,产品)的 [出数量]总和,

并且能实时更新。如果可以的话万望老师帮我写一个代码,也好让我有多一种选择。

 


--  作者:狐狸爸爸
--  发布时间:2012/2/23 7:58:00
--  

A表和B表通过客户、产品这两列建立关联,解决方法与2楼、6楼完全一致。

 

你看看:

 

 

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目294.table


--  作者:土佛
--  发布时间:2012/2/23 11:43:00
--  

我知道,你教给我的关联我已经会用了,很感谢!

只是希望你用代码帮我解决上述问题,让我多一种选择。