以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  请教:交叉统计,  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=77895)

--  作者:yancheng
--  发布时间:2015/11/27 12:24:00
--  请教:交叉统计,

Dim bd1 As New SQLCrossTableBuilder("统计表1","采购进货")
bd1.C
Dim dt1 As fxDataSource
bd1.HGroups.AddDef("定额编码")
bd1.VGroups.AddDef("合同名称")
bd1.Totals.AddDef("进货数量","进货_数量") \'对数量进行统计
bd1.Totals.AddDef("进货合计","进货_金额") \'对金额进行统计
dt1 = bd1.BuildDataSource()

Dim bd2 As New SQLCrossTableBuilder("统计表2","销售明细")
bd2.C
Dim dt2  As fxDataSource
bd2.HGroups.AddDef("定额编码") \'根据定额编码分组
bd2.VGroups.AddDef("合同名称") \'对数量进行统计
bd2.Totals.AddDef("销售数量","销售_数量") \'对数量进行统计
bd2.Totals.AddDef("销售合计","销售_金额") \'对金额进行统计
dt2 = bd2.BuildDataSource()
\'
\'Dim bd3 As New SQLCrossTableBuilder("统计表3","退货单")
\'bd3.C
\'Dim dt3 As fxDataSource
\'bd3.Groups.AddDef("定额编码") \'根据定额编码分组
\'bd3.Totals.AddDef("数量","退货_数量") \'对数量进行统计
\'bd3.Totals.AddDef("金额","退货_金额") \'对金额进行统计
\'dt3 = bd3.BuildDataSource()

Dim nms As String() = {"定额编码"} \'指定连接列
dt1.Combine(nms,dt2,nms) \'将销售统计数据组合到进货统计数据
\'dt1.Combine("定额编码",dt3,"定额编码") \'将退货统计数据组合到进货统计数据

Tables("库存数量表_Table1").DataSource = dt1 \'将统计结果绑定到Table
With DataTables("库存数量表_Table1").DataCols  \'用表达式列计算库存数据

    .Add("库存_数量",Gettype(Integer), "IsNull([进货_数量],0) - ISNULL([销售_数量],0)")
    .Add("库存_金额",Gettype(Double), "[库存_数量]  * [进货_金额]")
End With


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

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

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

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

 

目标问题:

1、弹出说:找不到:进货_数量,进货金额:列?

2、同一个工程,的进货与销售,不在同一个列组里面?(我需要的结构是:同一:合同名称,下的:进货、销售、库存。合同名称_进货\\销售\\库存_数量\\金额;

3、行里面,需要除了显示:定额编码外,还需要显示:材料名称,型号等信息。

[此贴子已经被作者于2015/11/27 12:28:57编辑过]

--  作者:大红袍
--  发布时间:2015/11/27 12:33:00
--  
上传项目测试。
--  作者:yancheng
--  发布时间:2015/11/27 13:00:00
--  

 

[此贴子已经被作者于2015/11/27 21:20:16编辑过]

--  作者:yancheng
--  发布时间:2015/11/27 13:06:00
--  
已上传实例
--  作者:yancheng
--  发布时间:2015/11/27 14:32:00
--  
已上传实例,麻烦老师了。
--  作者:大红袍
--  发布时间:2015/11/27 15:46:00
--  

下载信息
图片点击可在新窗口打开查看点击浏览该文件:新建文本文档.txt


--  作者:yancheng
--  发布时间:2015/11/27 16:21:00
--  

老师,我放把代码放进去了。大概是这个意思,但还有两个问题:(现在没有:库存数量)

1、库存,我是需要,每个合同都要看库存?(每个合同,就是一个:仓库)

2、库存数量=进货数量-销售数量。


图片点击可在新窗口打开查看此主题相关图片如下:77.jpg
图片点击可在新窗口打开查看
[此贴子已经被作者于2015/11/27 16:22:51编辑过]

--  作者:yancheng
--  发布时间:2015/11/27 16:44:00
--  

Dim sql As String = "sele ct a.定额编码 as 定额编码, 合同名称, a.数量 as 数量, 合计, 类型, b.* from (selec t 定额编码, 合同名称, 进货数量 as 数量, 进货合计 as 合计, \'进货\' as 类型 from {采购进货} union all se lect 定额编码, 合同名称, 销售数量, 销售合计, \'销售\' from {销售明细}) as a left join {材料} as b on a.定额编码 = b.定额编码"
这个代码,在帮助哪里有呢?

看不懂。


--  作者:大红袍
--  发布时间:2015/11/27 17:28:00
--  

mark 交叉统计

 

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:新建文本文档.txt


--  作者:yancheng
--  发布时间:2015/11/29 19:26:00
--  
Dim sql As String = "sele ct a.定额编码 as 定额编码, 合同名称, a.数量 as 数量, 合计, 类型, b.* from (sel ect 定额编码, 合同名称, 进货数量 as 数量, 进货合计 as 合计, \'进货\' as 类型 from {采购进货} union all s elect 定额编码, 合同名称, 销售数量, 销售合计, \'销售\' from {销售明细} union all sel ect 定额编码, 合同名称, 0, 0, \'进货\' from {销售明细} union all sele ct 定额编码, 合同名称, 0, 0, \'销售\' from {采购进货}) as a left join {材料} as b on a.定额编码 = b.定额编码"

Dim g As New CrossTableBuilder("统计表1",sql, "服务器")
g.HGroups.AddDef("定额编码")
g.HGroups.AddDef("材料名称")
g.HGroups.AddDef("单位")
g.VGroups.AddDef("合同名称")
g.VGroups.AddDef("类型")
g.Totals.AddDef("数量","数量") \'对数量进行统计
g.Totals.AddDef("合计","金额") \'对金额进行统计

Tables("库存数量表_Table1").DataSource = g.BuildDataSource

Dim t As Table = Tables("库存数量表_Table1")
Dim pht As String = ""
For i As Integer = t.Cols.Count - 1 To 0 Step -1
    If t.Cols(i).caption Like "*_销售_*" OrElse t.Cols(i).caption Like "*_进货_*" Then
        Dim ht As String = t.Cols(i).caption.Split("_")(0)
        If pht = Nothing OrElse ht <> pht Then
            t.DataTable.DataCols.Add(ht & "_库存_数量",Gettype(Integer), "isnull(" & t.cols(i-3).name & ",0) - isnull(" & t.Cols(i-1).name & ",0)")
            t.DataTable.DataCols.Add(ht & "_库存_金额",Gettype(Double), "isnull(" & t.cols(i-2).name & ",0) - isnull(" & t.Cols(i).name & ",0)")
            t.Cols(ht & "_库存_金额").Move(i+1)
            t.Cols(ht & "_库存_数量").Move(i+1)
            pht = ht
        End If
    End If
Next

上面代码看不懂:请教一下老师:
1、sele ct a.定额编码 as 定额编码  ;这个:a.   是什么意思?
2、union all sel ect 定额编码, 合同名称, 0, 0,  ;这个0, 0, 是什么意思?
3、Dim g As New CrossTableBuilder("统计表1",sql, "服务器")  这个sql是怎么意思?
[此贴子已经被作者于2015/11/29 19:28:04编辑过]