Foxtable(狐表)用户栏目专家坐堂 → [求助]SQL查询,又遇到问题,请老师指导一下,已上传例子在13楼


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

主题:[求助]SQL查询,又遇到问题,请老师指导一下,已上传例子在13楼

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


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

窗口2,AfterLoad事件代码,红色代码的空格自己去除

 

Dim tb1 As WinForm.Table = e.Form.Controls("Table1")
Dim tb2 As WinForm.Table = e.Form.Controls("Table2")
Dim filter As String = "公司 = '" & Forms("窗口1").Controls("Table1").Table.Current("公司") & "'"
tb1.Table.Fill("select * f rom {发货台账} where " & filter, True)
tb2.Table.Fill("select * f rom {收款台帐} where " & filter, True)

Dim t As Table = tb1.Table
Dim g As Subtotalgroup
t.SubtotalGroups.Clear()
t.GroupAboveData = False
t.TreeVisible = False
t.SpillNode = True

g = New Subtotalgroup
g.Aggregate = AggregateEnum.Sum
g.GroupOn = "*"
g.TotalOn = "重量,金额"
g.Caption = "总计"
t.SubtotalGroups.Add(g)

g = New Subtotalgroup
g.Aggregate = AggregateEnum.Sum
g.GroupOn = "合同号"
g.TotalOn = "重量,金额"
g.Caption = "{0} 小计"
t.SubtotalGroups.Add(g)

t.Subtotal()

t = tb2.Table
t.SubtotalGroups.Clear()
t.GroupAboveData = False
t.TreeVisible = False
t.SpillNode = True

g = New Subtotalgroup
g.Aggregate = AggregateEnum.Sum
g.GroupOn = "*"
g.TotalOn = "收款金额"
g.Caption = "总计"
t.SubtotalGroups.Add(g)

t.Subtotal()


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


加好友 发短信
等级:五尾狐 帖子:1104 积分:8956 威望:0 精华:0 注册:2014/10/25 11:24:00
  发帖心情 Post By:2015/2/24 11:55:00 [只看该作者]

好长的代码,我要看着代码套到我的项目上去,甜版真牛人啊,万分感谢!

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


加好友 发短信
等级:五尾狐 帖子:1104 积分:8956 威望:0 精华:0 注册:2014/10/25 11:24:00
  发帖心情 Post By:2015/2/27 21:45:00 [只看该作者]

根据老师的代码我已经套到项目上去了,现在还有二个小问题,

问题一:增加了一个C公司,这个公司还没有发货记录,只有收款记录,就当是预付款吧,在应收款查询表中希望能出现这家公司,发货金额为0,应收款为负数,目前老师的代码是基于已经有发货的情况下,用老师的代码进行查询时不会出现C公司;

问题2:增加一个D公司,这个公司只有发货记录,没有收款记录,用目前的代码生成的查询表时这个公司因为没有收款记录而导致没有计算应收款。

例子已经重新上传,请老师看下。


 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:查询统计例子_新.foxdb

[此贴子已经被作者于2015/2/28 15:45:59编辑过]

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


加好友 发短信
等级:五尾狐 帖子:1104 积分:8956 威望:0 精华:0 注册:2014/10/25 11:24:00
  发帖心情 Post By:2015/2/28 15:47:00 [只看该作者]

BIN老师来了,帮我看下,问题在13楼

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


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2015/2/28 16:02:00 [只看该作者]

改一下.反过来.

select a.公司, 发货金额,收款金额, 发货金额 - 收款金额 as 应收款 fr om (select 公司, sum(收款金额) as 收款金额 fr om {收款台帐} group by 公司) as a left join (select 公司,sum(金额) as 发货金额 fr om {发货台账} group by 公司) as b on a.公司 = b.公司

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


加好友 发短信
等级:五尾狐 帖子:1104 积分:8956 威望:0 精华:0 注册:2014/10/25 11:24:00
  发帖心情 Post By:2015/2/28 16:21:00 [只看该作者]

不行啊,二个问题全没解决,问题1中,C公司的应收款由于没有C公司的发货记录导致空,问题2中,D公司没有出现在查询表上。

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


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2015/2/28 16:30:00 [只看该作者]

select a.公司, 发货金额,收款金额, 发货金额 - 收款金额 as 应收款 f rom (select 公司,sum(金额) as 发货金额 f rom  (select 公司,金额 f rom {发货台账} U NION ALL select 公司,0 as 金额 f rom {收款台帐}) group by 公司) as a left join (select 公司, sum(收款金额) as 收款金额 f rom {收款台帐} group by 公司) as b on a.公司 = b.公司

这样

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


加好友 发短信
等级:五尾狐 帖子:1104 积分:8956 威望:0 精华:0 注册:2014/10/25 11:24:00
  发帖心情 Post By:2015/2/28 16:43:00 [只看该作者]

四个公司全出现在查询表上了,并且C公司也有应收款了,但是D公司由于只有发货记录没有收款记录,同样导致了应收款空。
另外,在项目的实际使用中还要加上一些列,例如公司代码,区域等,由于我对这个SQL语言根本不懂,只能是照着老师的样子改改,所以刚才学用了SQLGroupTableBuilder,但用这个时同样遇到了由于少发货记录或收款记录,而导致查询表不全的情况,我目前写的代码如下:
Dim b As New SQLGroupTableBuilder("查询表1","客户")
b.C
b.AddTable("客户","公司","销售结算台账","公司")'添加统计表
b.AddTable("客户","公司","销售收款台账","公司") '添加统计表
b.Groups.AddDef("{客户}.公司")'根据  名称分组
b.Groups.AddDef("结算金额")'
b.Groups.AddDef("{销售收款台账}.金额") '根据  名称分组
b.Totals.AddExp("应收款","结算金额 - {销售收款台账}.金额") 
Tables("多表查询测试_Table1").DataSource = b.BuildDataSource()
结算台账与收款台账实际上是多对多的表,我为了做成一对多,把客户表加了进来,能不能不用客户表就能实现在二张多对多并且记录不能一一对应的情况下实现应收款的统计。

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


加好友 发短信
等级:八尾狐 帖子:1812 积分:12993 威望:0 精华:14 注册:2008/10/11 18:07:00
  发帖心情 Post By:2015/2/28 16:52:00 [只看该作者]

Dim bd1 As New GroupTableBuilder("统计",DataTables("发货台账"))
Dim dt1 As fxDataSource
bd1.Groups.AddDef("公司") '根据型号分组
bd1.Totals.AddDef("金额","发货金额") '对数量进行统计
dt1 = bd1.BuildDataSource()

Dim bd2 As New GroupTableBuilder("统计",DataTables("收款台帐"))
Dim dt2 As fxDataSource
bd2.Groups.AddDef("公司") '根据型号分组
bd2.Totals.AddDef("收款金额") '对数量进行统计
dt2 = bd2.BuildDataSource()


dt1.Combine("公司",dt2,"公司") '将销售统计数据组合到进货统计数据


Tables("窗口1_Table1").DataSource = dt1 '将统计结果绑定到Table
With DataTables("窗口1_Table1").DataCols  '用表达式列计算库存数据
    .Add("应收款",Gettype(Double), "IsNull([发货金额],0) - ISNULL([收款金额],0)")
End With

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


加好友 发短信
等级:五尾狐 帖子:1104 积分:8956 威望:0 精华:0 注册:2014/10/25 11:24:00
  发帖心情 Post By:2015/2/28 17:04:00 [只看该作者]

楼上是高手,问题解决,万分感谢!
我要好好研究下代码

 回到顶部
总数 20 上一页 1 2