以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  关于多表查询和  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=106328)

--  作者:stevenfm
--  发布时间: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万的数据。发现做这种多表查询后,会卡一会,有什么办法解决嘛 ?(只要做过了,后面做任何操作都会卡一下)










--  作者:有点甜
--  发布时间: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
--  发布时间: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
--  发布时间: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("档期汇总")


--  作者:有点甜
--  发布时间:2017/9/7 14:46:00
--  
 做一个例子发上来说明具体问题。
--  作者:stevenfm
--  发布时间: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


--  作者:有点甜
--  发布时间: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
--  发布时间: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("档期汇总")


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