以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  类似交叉统计的统计  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=3726)

--  作者:chenwuwenyu
--  发布时间:2009/7/28 16:45:00
--  类似交叉统计的统计
例:公司有五种产品为A、B、C、D、E
产品使用表
日期  销售人员   产品     数量
02       小李      A          1
05       小李      D          2
假如上面为产品使用表中筛选出来的两行数据
目前需要根据这两行数据生成如下表
日期 A      B       C      D       E
02   1
05                             2

问题就是如何实现这个产品的统计填入

不知道我有没有把问题说清楚呢

帮助中跨表的统计,貌似能实现,不过我不怎么懂,请教各位,谢谢大家

--  作者:mr725
--  发布时间:2009/7/28 18:14:00
--  
如果没有更好的办法,就这样:  建立一个和产品使用表一样结构的空表(或用代码生成一个临时表),筛选的结果充填到这个空表中,再在这个表(被充填数据的表)上进行交叉统计..............应该ok了~  
--  作者:reachtone
--  发布时间:2009/7/28 18:28:00
--  

直接用交叉统计就可生成.


--  作者:chenwuwenyu
--  发布时间:2009/7/28 18:28:00
--  

问题是交叉统计并不能生成我想要的表的结构,比如有此所统计的数据中不会五种产品都有,交叉统计表也就不会出现相对应的列,


--  作者:mr725
--  发布时间:2009/7/28 19:29:00
--  

做个例子上来,包括:原始表(包含一定数据行) 和 要生成的交叉统计表的结构。。。。。。。。


--  作者:chenwuwenyu
--  发布时间:2009/7/28 20:41:00
--  

由产品表生成统计表,注意一点是,产品表中并未出现过产品C,但要求统计表有这一列

另:希望统计结果是针对筛选结果也可以进行,不是针对全表数据

谢谢大家

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目1.table

[此贴子已经被作者于2009-7-28 20:43:59编辑过]

--  作者:狐狸爸爸
--  发布时间:2009/7/28 21:05:00
--  
没有看懂,不过交叉统计本来就只包括筛选出来的数据嘛,为啥不用呢?
--  作者:chenwuwenyu
--  发布时间:2009/7/28 22:23:00
--  
交叉统计生成的统计表,横向统计产生的列只是目前数据表中有的类型,而且列不排序,我需要的是,某产品在数据表中没有,但统计表中也要有这一列
不知道有没有表达清楚呢图片点击可在新窗口打开查看
--  作者:mr725
--  发布时间:2009/7/28 22:30:00
--  
以下是引用狐狸爸爸在2009-7-28 21:05:00的发言:
没有看懂,不过交叉统计本来就只包括筛选出来的数据嘛,为啥不用呢?

楼主要在统计表中固定一些列,来达到统计的结果。也不知道筛选后会有几个产品被筛选出来的~

楼主你在“产品表”做个按钮,在你筛选完后(要排除重复内容),点击这个按钮 代码:  试一试吧
注意:与数字计算有关的列要改为整数型(或其他数字型),统计表中产品A的列名为‘A ’,列标题为‘产品A’,其他列亦同

DataTables("统计表").DataRows.Clear()
for i as Integer = 0 to tables("产品表").count -1
    Dim dr As DataRow
    dr = DataTables("统计表").AddNew()
    dr("医生") = currenttable(i,"医生")
next

MainTable = Tables("统计表")
for i as Integer = 0 to tables("统计表").count -1
    For Each cl As Col In tables("统计表").Cols
        if cl.name <> "日期" and cl.name <> "医生"
            currenttable(i,cl.name)= DataTables("产品表").Compute("Sum(数量)", "产品 = \'" & cl.name & "\'and 医生 = \'" & currenttable(i,"医生") & "\' ")
        end if
    Next
Next

[此贴子已经被作者于2009-7-28 22:32:00编辑过]

--  作者:狐狸爸爸
--  发布时间:2009/7/28 22:31:00
--  

哦,明白了。
没有办法的,只能先用交叉统计,然后对于那些没有出现的产品,用代码增加对应的列。

利用Add方法,可以增加临时列,并可给临时列设置表达式。
通过代码增加的临时列,在重新打开项目文件后,将不复存在。

Add方法的语法为:

Add(Name, GetType(Type))
Add(Name, GetType(Type), Expression)

参数说明:

  • Name
    新增列的名称
     
  • Type
    新增列的数据类型,需要配合GetType关键字来获得数据类型,例如GetType(String)表示字符型,GetType(Boolean)表示逻辑型。
     
  • Expression
    可选参数,指定新增列的计算表达式,请参考表达式的运算符和函数

例如:

DataTables("订单").DataCols.Add("金额", GetType(Double), "[数量] * [单价] * (1 - [折扣])")