Foxtable(狐表)用户栏目专家坐堂 → SQLJoinTableBuilder能否合并多个结构相同的查询表?


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

主题:SQLJoinTableBuilder能否合并多个结构相同的查询表?

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


加好友 发短信
等级:超级版主 帖子:521 积分:4910 威望:0 精华:7 注册:2008/9/2 22:22:00
SQLJoinTableBuilder能否合并多个结构相同的查询表?  发帖心情 Post By:2011/6/13 14:28:00 [显示全部帖子]


看来还需提供象SQL的UNION 的功能!

很多时候,一次SQLJoinTableBuilder不是我们想要的,必需对一些特殊情况进行二次处理,然后把[普遍]与[特殊]合并在一起!如下,如何合并"查询表1"与"查询表2"?

Dim jb As new SQLJoinTableBuilder("查询表1","A")
jb.AddTable("A","deno","B","deno")
jb.AddCol("A","序號")
jb.AddCol("B","deno")
jb.Build()


Dim jb As new SQLJoinTableBuilder("查詢2","A")
jb.AddTable("A","deno","B","deno")
jb.AddTable("B","clno","C","dno")
jb.AddCol("A","序號")
jb.AddCol("C","dno" ,"deno")
jb.Filter = "[商品砼] =0"
jb.Build()


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


加好友 发短信
等级:超级版主 帖子:521 积分:4910 威望:0 精华:7 注册:2008/9/2 22:22:00
  发帖心情 Post By:2011/6/13 14:43:00 [显示全部帖子]

试了不行![查询表1]与[查询表2]是无关联的,dt1.Combine("",dt2,"") 不行

我的意思是:把[查询表2]的结果接在[查询表1]的后面



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


加好友 发短信
等级:超级版主 帖子:521 积分:4910 威望:0 精华:7 注册:2008/9/2 22:22:00
  发帖心情 Post By:2011/6/13 14:49:00 [显示全部帖子]

另SQLJoinTableBuilder好似不支持查询表

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


加好友 发短信
等级:超级版主 帖子:521 积分:4910 威望:0 精华:7 注册:2008/9/2 22:22:00
  发帖心情 Post By:2011/6/13 15:04:00 [显示全部帖子]

以下是引用狐狸爸爸在2011-6-13 14:51:00的发言:

呵呵,合并的问题我看看

查询肯定不支持的,SQLJoinTableBuilder是从后台提取数据的



如fxDataSource能够:dt1 UNION dt2 表示无关联合并就行了(当然得有个Filter)


另jb.AddExp("A","[數量]=null","C")设置的列总是跑到表后?


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


加好友 发短信
等级:超级版主 帖子:521 积分:4910 威望:0 精华:7 注册:2008/9/2 22:22:00
  发帖心情 Post By:2011/6/13 15:30:00 [显示全部帖子]

以下是引用狐狸爸爸在2011-6-13 15:26:00的发言:

呵呵,合并我会搞定的。

后添加的列,肯定在最后啊?



jb.AddExp("A","[數量]=null","C")在前面也一样跑在后面!


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


加好友 发短信
等级:超级版主 帖子:521 积分:4910 威望:0 精华:7 注册:2008/9/2 22:22:00
  发帖心情 Post By:2011/6/13 16:10:00 [显示全部帖子]

还有,表达式增加的列,其表达式只能是指定表的列,不能象

SQLJoin那样:A.clsl*B.數量 




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


加好友 发短信
等级:超级版主 帖子:521 积分:4910 威望:0 精华:7 注册:2008/9/2 22:22:00
  发帖心情 Post By:2011/6/13 21:13:00 [显示全部帖子]

以下是引用YBIL在2011-6-13 16:10:00的发言:


还有,表达式增加的列,其表达式只能是指定表的列,不能象

SQLJoin那样:A.clsl*B.數量 

以下是引用狐狸爸爸在2011-6-13 16:11:00的发言:

那个是不行的吧。

在生成查新表之后,再用foxtable自己的功能增加表达式列算了。


既然SQLJoinTableBuilder是从后台提取数据的,那它应象SQL的 JOIN 那样:表达式的列可以来自不同表的列,如范例的『组合统计结果』,组合对应的[进货数量]与[销售数量]易如反掌

select J.型号,J.数量 as 进货 ,  X.数量 as 销售 ,J.数量- X.数量  as  库存 from{进货单} J  inner join {销售单} X on J.型号= X.型号



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


加好友 发短信
等级:超级版主 帖子:521 积分:4910 威望:0 精华:7 注册:2008/9/2 22:22:00
  发帖心情 Post By:2011/6/13 21:22:00 [显示全部帖子]

以下是引用reachtone在2011-6-13 21:14:00的发言:

最理想的是这样,就想我在另一个帖子中提到的,不仅仅是把不同表中的列最合到一起,还能根据不同表中的列组成计算表达式从而生成新列,这就真正有了join的精髓了:

 

Combine(LeftColName, LeftCols,RightDataSource, RightColName,RightCols,Name, Expression,Caption)
其中,LeftCols为左表要组合的列名集合,RightCols为右表要组合的列名集合,

      Name为新增列名,Expression为计算表达式,可以根据两表的相关列生成新的数据,Caption为新增列的别名。

 

无非就是生成sql语句而已,老六再多费点脑细胞总是可以做到的,呵

非常赞同!现在的SQLJoinTableBuilder,对付简单的组合可以胜任,复杂的有点力不从心!

[此贴子已经被作者于2011-6-14 6:36:45编辑过]

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


加好友 发短信
等级:超级版主 帖子:521 积分:4910 威望:0 精华:7 注册:2008/9/2 22:22:00
  发帖心情 Post By:2011/6/14 15:45:00 [显示全部帖子]

以下是引用狐狸爸爸在2011-6-13 21:46:00的发言:

呵呵,事后增加表达式列,不是一样简单吗?

 

刚刚细想一样,表达式由不同表的列组成,也是可以的,打开示例文件“关联演示.Table”,在命令窗口执行下面的代码:

 

Dim jb As new SQLJoinTableBuilder("查询表1","订单")
jb.AddTable("订单","产品编号","产品","产品编号")
jb.AddTable("订单", "客户编号","客户","客户编号")
jb.AddCol("产品","产品名称","产品")
jb.AddCol("客户","客户名称", "客户")
jb.AddCols("订单", "日期", "数量")
jb.AddExp("订单","[数量] *{产品}.单价","金额")
jb.Build

 

查询表的金额列,由订单表的数量和产品表的单价计算得出,注意表达式中单价列表达方式:表名用大括号,列名不能用任何括号。

SQLGroupTableBuilder和SQlCrossTableBuilder,都可以用这样的方式。



SQLGroupTableBuilder俺用得較少,參考您寫的,試著寫寫,下面的為何報錯(如把代碼中紅色部分換為10則正常)?

Dim b As  SQLGroupTableBuilder
b = new SQLGroupTableBuilder("A","订单")
b.AddTable("订单","产品编号","产品","产品编号")
b.AddCols("产品","产品编号","产品名称")
b.AddCols("订单","数量") 
b.AddCols("产品","单价") 
b.Groups.AddDef("产品编号") 
b.Groups.AddDef("产品名称") 
b.Totals.AddExp("金额","[数量] *{产品}.单价") 
b.Build 





 回到顶部