以文本方式查看主题

-  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=103621)

--  作者:jick0526
--  发布时间:2017/7/12 17:33:00
--  跨表统计问题
老师,请问下,当表A的A列B列C列和表B的A列B列C列都相同时,表B的D列总和会统计到表A的D列,相当与跨表统计吧,但前提时A列B列C列都相同的前提下,这代码要怎么写,谢谢!
--  作者:jick0526
--  发布时间:2017/7/12 17:35:00
--  
老师,补充下,我想要达到即时更新的效果,不需要重置列就可以即时更新
--  作者:chnfo
--  发布时间:2017/7/12 17:41:00
--  
比较简单的方法是在A和B表中都加一个辅助表达式列,Temp=isnull(A,\'\') + \' \' + isnull(B,\'\') + \' \' + isnull(C,\'\')
表A的datacolchanged事件 
select case e.datacol.name
case "A"
datarow("D") = datatables("B").compute("Sum(D)","Temp = \'" & e.datarow("Temp") & "\'")
end select 

表B的datacolchanged事件 
select case e.datacol.name
case "A"
dim pr as datarow = datatables("A").find("Temp = \'" & e.datarow("TEMP") & "\'")
if pr isnot nothing then 
datatables("A").datacols("A").RaiseDataColChanged(pr)
end if 
end select 


如果你用
datarow("D") = datatables("B").compute("Sum(D)","A = \'" & e.datarow("A") & "\' and B =\'" & e.datarow("B") & "\' and C = \'" & e.datarow("C") & "\'") 
的话,如果表B的A或B或C列的值量很大的话(比如一次复制10000行进去),估计就要等好久。


其实,你这样设计是有问题的。应当表B中有一列AID,将它与A表中的ID关联起来,然后表B中增加表达式列A、B、C。
然后表A的D列用表达式sum(child.D)
[此贴子已经被作者于2017/7/12 17:47:07编辑过]

--  作者:jick0526
--  发布时间:2017/7/12 18:27:00
--  
AID什么意思
--  作者:有点甜
--  发布时间:2017/7/12 20:57:00
--  
以下是引用jick0526在2017/7/12 18:27:00的发言:
AID什么意思

 

你提问的都是最基础的问题。请把视频教程先看一遍。

 

http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&Id=67187