Foxtable(狐表)用户栏目专家坐堂 → [已解决]求助多表合并方法。


  共有3039人关注过本帖树形打印复制链接

主题:[已解决]求助多表合并方法。

帅哥哟,离线,有人找我吗?
husl
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:114 积分:984 威望:0 精华:0 注册:2015/11/16 12:46:00
[已解决]求助多表合并方法。  发帖心情 Post By:2017/5/21 15:28:00 [只看该作者]

 有表A 表B
A表
 ID 
  名称
  单价  
   1   A   15
   2B   20

B表
 ID 
  数量
   1   3
  2
   4

请教怎么用代码直接生成  窗口表 C
ID
名称
单价
数量
合计
1
A
14
3
42
2
B
20
4
80

我在窗口中添加列这样写,但是数量这里咋办呢?。
With tb.DataTable.DataCols    'tb我定义的是表A
    .Add("数量",Gettype(Double), "")
    .Add("合计",Gettype(Double), "ISNULL([单价],0)*ISNULL([数量],0)")
End With

求教。,。。




【解决办法】
找了半天方法,最后做了关联

只是不知道还有没有别的好办法了。类似于 left join 一样的。

 Relations.Add("po",表A.DataTable.DataCols("ID"),表B.DataTable.DataCols("ID"))
With tb.DataTable.DataCols    'tb我定义的是表A
    .Add("数量",Gettype(Double), "sum(Child(po).数量")
    .Add("合计",Gettype(Double), "ISNULL([单价],0)*ISNULL([数量],0)")
End With
 Relations.Delete("po")





[此贴子已经被作者于2017/5/21 16:29:46编辑过]

 回到顶部
帅哥,在线噢!
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:111393 积分:567029 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2017/5/22 8:49:00 [只看该作者]

如果需要编辑数据的,只能使用关联表

不需要编辑的,可以使用sqlquery表,用sql直接 left join即可

 回到顶部
帅哥哟,离线,有人找我吗?
husl
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:114 积分:984 威望:0 精华:0 注册:2015/11/16 12:46:00
  发帖心情 Post By:2017/5/22 10:16:00 [只看该作者]

 老师好,。主要是我的 A,B 表是内部函数生成的,函数定义的就是个Table,满足一大串条件之后,然后再 XX.fill(select ***) 生成的一堆表中选的两个临时表,,窗口中通过Functions.Execute引用的,目前想不到别的办法,除非把函数都改掉,但是工程太大。。。另外因为 select 语言太长,。我直接在SQL server 生成视图都可以的,但是在foxtable中经常出现莫名其妙的错误。。所以有的表是 SQL语句生成的,有的是视图。
就是这样得出来的 A表和 B表。
表c不需要编辑,有没有别的啥办法呢?


[此贴子已经被作者于2017/5/22 10:20:17编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
有点色
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2017/5/22 10:21:00 [只看该作者]

 你的表A和表B直接连接查询不就行了?类似

 

http://www.foxtable.com/bbs/dispbbs.asp?BoardID=2&ID=100766&skin=0

 


 回到顶部
帅哥哟,离线,有人找我吗?
husl
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:114 积分:984 威望:0 精华:0 注册:2015/11/16 12:46:00
  发帖心情 Post By:2017/5/22 11:00:00 [只看该作者]

 额。这个例子。

Dim sql1 As String = "select 反馈完成日 as 日期, 样办数量 as 反馈, 0 as 计划 from (" & sql4 & ") union all select 计划完成日, 0, 样办数量 from (" & sql5 & ")"



from (“ & sql4 & ”)  
其中的SQL4 是 String,但是我的  Functions.Execute  定义的   是table.fill(****)  

求教。这个怎么写呢。


 回到顶部
帅哥,在线噢!
有点蓝
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:111393 积分:567029 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2017/5/22 11:57:00 [只看该作者]

Dim sql1 As String = "select 反馈完成日 as 日期, 样办数量 as 反馈, 0 as 计划 from (" & sql4 & ") union all select 计划完成日, 0, 样办数量 from (" & sql5 & ")"
table.fill(sql,true) 

 回到顶部
帅哥哟,离线,有人找我吗?
有点色
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2017/5/22 12:04:00 [只看该作者]

 回复5楼,你用一个变量记录对应表的sql语句吧,比如

 

vars("表A") = sql语句

 

 你的问题,同样可以用代码解决。填充表内容,可以这样写

 

For Each r As row in Tables("表C").Rows

    Dim fdr As DataRow = DataTables("表B").Find("id = '" & r("id") & "'")

    If fdr isnot nothing then

        r("数量") = fdr("数量")

    End If

Next


 回到顶部
帅哥哟,离线,有人找我吗?
husl
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:114 积分:984 威望:0 精华:0 注册:2015/11/16 12:46:00
  发帖心情 Post By:2017/5/22 16:16:00 [只看该作者]


谢谢了老师们的耐心解答 。但是貌似 不在一个频道。。。还是我没理解。。。我的表A和B 是用 这样的 内部函数 得出来的
Dim a As Table =Args(0)
……………………
 a.DataTable.Fill("select ************)

窗口中的表 A,和B是
Functions.Execute(“a”,A)
Functions.Execute(“****”,B)

还有一个就是空的 table控件。 目的是在这个 table里面 生成 表C

上面的方法貌似不行吧?。除非修改内部函数 定义一个  String
然后 用 下面的方法。。
Dim sql1 As String = "select 反馈完成日 as 日期, 样办数量 as 反馈, 0 as 计划 from (" & sql4 & ") union all select 计划完成日, 0, 样办数量 from (" & sql5 & ")"
table.fill(sql,true)

是这样吗?






 回到顶部
帅哥哟,离线,有人找我吗?
有点色
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2017/5/22 16:52:00 [只看该作者]

 用两个全局变量记录生成你a表、b表的sql语句,这样你可以直接写sql语句生成表C了。

 

 你也可以写代码处理,不就是把数量列填充过去而已嘛?类似代码

 

For Each r As row in Tables("表C").Rows

    Dim fdr As DataRow = DataTables("表B").Find("id = '" & r("id") & "'")

    If fdr isnot nothing then

        r("数量") = fdr("数量")

    End If

Next


 回到顶部
帅哥哟,离线,有人找我吗?
husl
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:114 积分:984 威望:0 精华:0 注册:2015/11/16 12:46:00
  发帖心情 Post By:2017/5/22 16:57:00 [只看该作者]


好的,明白了。谢谢!!

 回到顶部