以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  求助啊,这样的查询表狐表能不能实现啊!大神帮助啊!  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=43695)

--  作者:lhpc120
--  发布时间:2013/12/12 23:11:00
--  求助啊,这样的查询表狐表能不能实现啊!大神帮助啊!

现在有一张表,如下图:


图片点击可在新窗口打开查看此主题相关图片如下:2.jpg
图片点击可在新窗口打开查看

我想生成如下图的汇总表:

 


图片点击可在新窗口打开查看此主题相关图片如下:1.jpg
图片点击可在新窗口打开查看

尝试了用手动编码的方式这样做的:

 

Dim dtb As New DataTableBuilder("统计")
dtb.AddDef("商户编号", Gettype(String), 16)
dtb.AddDef("商户名称", Gettype(String), 64)
dtb.AddDef("期初库存", Gettype(Double))
dtb.AddDef("入库量(吨)_汽运入库", Gettype(Double))
dtb.AddDef("入库量(吨)_铁运入库", Gettype(Double))
dtb.AddDef("入库量(吨)_转库入库", Gettype(Double))
dtb.AddDef("入库量(吨)_入库合计", Gettype(Double))
dtb.AddDef("出库量(吨)_汽运出库", Gettype(Double))
dtb.AddDef("出库量(吨)_铁运出库", Gettype(Double))
dtb.AddDef("出库量(吨)_转库出库", Gettype(Double))
dtb.AddDef("出库量(吨)_出库合计", Gettype(Double))
dtb.AddDef("期末库存", Gettype(Double))
Tables("出入转汇总表_Table1").DataSource = dtb.BuildDataSource()
Dim cmd As New SQLCommand
cmd.C
Dim dt As DataTable
cmd.CommandText = "Select * From {出入转流水}"
dt = cmd.ExecuteReader
For Each nm As String In dt.GetValues("商户编号")
    Dim dr As DataRow = DataTables("出入转汇总表_Table1").AddNew()
    cmd.CommandText = "Select * From {商户库存} Where 商户编号 = \'" & nm & "\'"
    Dim dt1 As DataTable = cmd.ExecuteReader
    dr("商户编号") = nm
    dr("商户名称") = dt1.DataRows(0)("商户名称")
    dr("期初库存") = dt1.Compute("Sum(库存数量)")
    dr("入库量(吨)_汽运入库") = dt.Compute("Sum(重量)","[商户编号] = \'" & dr("商户编号") & "\' And [运输方式] = \'汽运\' And [出入转] = \'入\'")
    dr("入库量(吨)_铁运入库") = dt.Compute("Sum(重量)","[商户编号] = \'" & dr("商户编号") & "\' And [运输方式] = \'铁运\' And [出入转] = \'入\'")
    dr("入库量(吨)_转库入库") = dt.Compute("Sum(重量)","[商户编号] = \'" & dr("商户编号") & "\' And [运输方式] = \'转入\'")
    dr("入库量(吨)_入库合计") = dt.Compute("Sum(重量)","[商户编号] = \'" & dr("商户编号") & "\' And [出入转] = \'入\'")
    dr("出库量(吨)_汽运出库") = dt.Compute("Sum(重量)","[商户编号] = \'" & dr("商户编号") & "\' And [运输方式] = \'铁运\' And [出入转] = \'出\'")
    dr("出库量(吨)_铁运出库") = dt.Compute("Sum(重量)","[商户编号] = \'" & dr("商户编号") & "\' And [运输方式] = \'转出\' And [出入转] = \'出\'")
    dr("出库量(吨)_转库出库") = dt.Compute("Sum(重量)","[商户编号] = \'" & dr("商户编号") & "\' And [运输方式] = \'转出\'")
    dr("出库量(吨)_出库合计") = dt.Compute("Sum(重量)","[商户编号] = \'" & dr("商户编号") & "\' And [出入转] = \'出\'")
    dr("期末库存") = dr("期初库存") + dr("入库量(吨)_入库合计") - dr("出库量(吨)_出库合计")
Next

 

因为上面这种方式的效率实在不敢恭维,就考虑了下面的方式:

 

Dim g As New SQLCrossTableBuilder("统计表1", "出入转流水")
g.C
g.HGroups.AddDef("商户编号")
g.HGroups.AddDef("商户名称")
g.HGroups.AddDef("园区")
g.VGroups.AddDef("出入转", "{0}库量(吨)")
g.VGroups.AddDef("运输方式", "{0}")
g.Totals.AddDef("重量", "重量")
g.OrderByTotal = True
g.HorizontalTotal = True
g.FromServer = True
g.Build()
MainTable = Tables("统计表1")

 

但是问题来了!

 

首先我想实现期初库存的调用怎么办?

 

可以用直接进行汇总统计这个流水表实现!这个也可以理解,但是不知道流水表几十万条数据全部进行统计会不会效率很低?

 

另外:我的表里面有个叫园区的列,也就是说,再不同园区,有相同的商户名称存在,我需要对相同的商户名称进行合并分组,合并后还要再期末库存的后面增加一列,把相同商户的不同园区的数量进行合计,求方法!

 

附下图样式!

 

 

 


图片点击可在新窗口打开查看此主题相关图片如下:3.jpg
图片点击可在新窗口打开查看

--  作者:有点甜
--  发布时间:2013/12/12 23:17:00
--  
 用查询表来做,或者直接用sql语句,参考,秒速


--  作者:lhpc120
--  发布时间:2013/12/13 0:52:00
--  

楼上的很感谢,但是,我用查询表查询出了数据,如何进行做到表三这样的效果呢?


--  作者:狐狸爸爸
--  发布时间:2013/12/13 8:23:00
--  

用组合统计,分三步:

1、一个SQlCrossTableBuilder,常规统计,得到指定日期范围内的出库数量和入库数量

2、再个SQlCrossTableBuilder,常规统计,得到指定日期范围之前期初数据

3、组合两个统计表。

 

有关组合统计,从这一节开始参考:

http://www.foxtable.com/help/topics/2402.htm

 

这也是组合统计的另一个典型应用。

[此贴子已经被作者于2013-12-13 8:25:42编辑过]