Foxtable(狐表)用户栏目专家坐堂 → 关于多表查询和


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

主题:关于多表查询和

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


加好友 发短信
等级:婴狐 帖子:35 积分:329 威望:0 精华:0 注册:2017/8/2 17:44:00
关于多表查询和  发帖心情 Post By:2017/9/6 18:10:00 [只看该作者]

比如:

Dim jb As New SQLJoinTableBuilder("查询表1","订单")
Dim
sl As String
jb
.ConnectionName = "Sale"
jb
.AddTable("订单","产品ID","库存","产品ID")
jb.AddCols("{订单}.产品ID","数量","单价")
jb
.AddExp("金额","数量 * 单价")

jb.AddExp("库存","库存")
sl
= jb.BuildSQL()
Output
.Show(sl)


我想知道,如果我库存里面有一个商品库存是“空值”不是0.


是不是最后就没办法汇总单品的“库存量”和“金额”了。我只是用了一张大家熟悉的表,修改了一下。


另外,我自己做的表有差不多7、8万的数据。发现做这种多表查询后,会卡一会,有什么办法解决嘛 ?(只要做过了,后面做任何操作都会卡一下)










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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/9/6 19:34:00 [只看该作者]

1、可以判断,如果为空,就设置成0

 

jb.AddExp("金额","isnull(数量,0) * isnull(单价,0)")

或者  jb.AddExp("金额","iif(数量 is null,0, 数量) * iif(单价 is null,0,单价)")

 

2、不可能一直卡的,卡也是你运行代码的时候才会卡,你一直运行么?


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


加好友 发短信
等级:婴狐 帖子:35 积分:329 威望:0 精华:0 注册:2017/8/2 17:44:00
  发帖心情 Post By:2017/9/7 14:08:00 [只看该作者]

AfterOpenProject里面加入这个了。虽然我看例子只要加载一个。

Forms("海报档期录入").open()
MainTable = Tables("海报档期基本信息表")
'Forms("整体销售录入")open()
MainTable = Tables("整体销售表")
'Forms("海报清单录入")open()
MainTable = Tables("海报清单表")
'Forms("海报预估录入")open()
MainTable = Tables("海报预估销售表")


MainTableChanging里面加入这个
Select Case e.NewTableName
    Case "海报档期基本信息表"
        Forms("海报档期录入").Open()
    Case "整体销售表"
        Forms("整体销售录入").Open()
    Case "海报清单表"
        Forms("海报清单录入").Open()
    Case "海报预估销售表"
        Forms("海报预估录入").open()
End Select


是不是因为AfterOpenProject加载的关系嘛?但我不加感觉下面这MainTableChanging有的时候会点失效,要每个点一下才正常。

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


加好友 发短信
等级:婴狐 帖子:35 积分:329 威望:0 精华:0 注册:2017/8/2 17:44:00
  发帖心情 Post By:2017/9/7 14:40:00 [只看该作者]

只是想把档期的编号汇总到一个表里做个统计。
根据“海报档期号”关联表。
现在我统计出来的额度不对。每个档期号里面有很多商品。统计了一下销售额和我汇总的数额翻倍还对不起来。不知道为什么。

‘预估销售里面可能不是每个档期都有预估销售。现在统计出来只有预估表有的才能统计销售。我把
“jb.AddTable("海报清单表","海报档期号","海报预估销售表","海报档期号")”去掉。数据是对的。但是想统计一下预估销售就不对了。
预估销售表中也是一个档期号对应好几个部门的销售预估。也是需要sum统计的。

功能就只是想统计一个档期号的总销售和总预估

Dim jb As New SQLJoinTableBuilder("档期汇总","海报清单表")
jb.C
jb.AddTable("海报清单表","海报档期号","海报档期基本信息表","海报档期号")
jb.AddTable("海报清单表","海报档期号","海报预估销售表","海报档期号")
'jb.AddTable("海报清单表","海报档期号","整体销售表","海报档期号")
jb.AddCols("{海报清单表}.海报档期号","海报主题",True)
jb.AddExp("目标销售","Sum(isnull(目标销售,0))") '这个语法错误了嘛?不能通过。
jb.AddExp("销售额","Sum(销售额 / 10000)") 
jb.Build()
MainTable = Tables("档期汇总")


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/9/7 14:46:00 [只看该作者]

 做一个例子发上来说明具体问题。

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


加好友 发短信
等级:婴狐 帖子:35 积分:329 威望:0 精华:0 注册:2017/8/2 17:44:00
  发帖心情 Post By:2017/9/7 16:29:00 [只看该作者]

Dim jb As New SQLJoinTableBuilder("档期汇总","海报清单表")
jb.AddTable("海报清单表","海报档期号","海报档期基本信息表","海报档期号")
jb.AddTable("海报清单表","海报档期号","海报预估销售表","海报档期号")

jb.AddCols("{海报清单表}.海报档期号","海报主题",True)

jb.AddExp("目标销售","Sum(目标销售)")
jb.AddExp("销售额","Sum(销售额 / 10000)")
jb.Build()
MainTable = Tables("档期汇总")

* 标注黄色去掉是没有问题的。现在加上是想统计目标销售(只不过这个目标销售在目标销售表中无,能否显示为0呢?)

生成这个表后,原来加载的窗口会有点失效。

密码是默认密码,请老师指点。数据只是练习数据
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:测试.table


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/9/7 17:23:00 [只看该作者]

Dim b As New SQLGroupTableBuilder("统计表1","海报清单表")
b.AddTable("海报清单表","海报档期号","海报档期基本信息表","海报档期号")
b.Groups.AddDef("{海报清单表}.海报档期号","海报档期号")
b.Groups.AddDef("{海报档期基本信息表}.海报主题","海报主题")
b.Totals.AddExp("销售额","销售额 / 10000")
Dim dt1 As fxDataSource
dt1 = b.BuildDataSource()

b = New SQLGroupTableBuilder("统计表2","海报预估销售表")
b.AddTable("海报预估销售表","海报档期号","海报档期基本信息表","海报档期号")
b.Groups.AddDef("{海报预估销售表}.海报档期号","海报档期号")
b.Groups.AddDef("{海报档期基本信息表}.海报主题","海报主题")
b.Totals.AddExp("目标销售","目标销售")
Dim dt2 As fxDataSource
dt2 = b.BuildDataSource()

dt1.Combine("海报档期号",dt2,"海报档期号")

dt1.show("测试")
MainTable = Tables("测试")


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


加好友 发短信
等级:婴狐 帖子:35 积分:329 威望:0 精华:0 注册:2017/8/2 17:44:00
  发帖心情 Post By:2017/9/8 10:27:00 [只看该作者]

Dim b As New SQLGroupTableBuilder("统计表1","海报清单表")
b.C
b.AddTable("海报清单表","海报档期号","海报档期基本信息表","海报档期号")
b.Groups.AddDef("{海报清单表}.海报档期号","海报档期号")
b.Groups.AddDef("{海报档期基本信息表}.海报主题","海报主题")
b.Totals.AddExp("销售额","销售额 / 10000")
Dim dt1 As fxDataSource
dt1 = b.BuildDataSource()

Dim c As New SQLGroupTableBuilder("统计表2","海报预估销售表")
c.C
'b = New SQLGroupTableBuilder("统计表2","海报预估销售表")
c.AddTable("海报预估销售表","海报档期号","海报档期基本信息表","海报档期号")
c.Groups.AddDef("{海报预估销售表}.海报档期号","海报档期号")
'b.Groups.AddDef("{海报档期基本信息表}.海报主题","海报主题")
c.Totals.AddExp("目标销售","目标销售")
Dim dt2 As fxDataSource
dt2 = c.BuildDataSource()
dt1.Combine("海报档期号",dt2,"海报档期号")
dt1.show("档期汇总")
MainTable = Tables("档期汇总")


谢谢甜老师,可以了,后面的我自己在试试。

 回到顶部