以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  交叉统计的精简版的实现  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=123138)

--  作者:susu312
--  发布时间:2018/8/8 17:50:00
--  交叉统计的精简版的实现


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

 

 

代码:

Dim b As New SQLCrossTableBuilder("统计表1","person")
For Each r As Row In Tables("统计1").Rows
    b.HGroups.AddDef(r("分组列")) \'添加列用于水平分组
Next

For Each r As Row In Tables("统计2").Rows
    b.VGroups.AddDef(r("分组列")) \'添加列用于水平分组
Next

For Each r As Row In Tables("统计3").Rows
    b.Totals.AddDef(r("统计列")) \'添加列用于统计
Next

If e.Form.Controls("CheckBox1").Select = True Then   \'水平方向生成汇总
    b.HorizontalTotal = True
End If

If e.Form.Controls("CheckBox2").Select = True Then   \'垂直方向生成汇总
    b.VerticalTotal = True
End If

b.Build \'生成统计表
MainTable = Tables("统计表1") \'打开生成的统计表
Tables("统计_Table1").DataSource= b.BuildDataSource   \'统计表放入指定窗口表

 

 

 

老师,我觉的我上面代码的逻辑是正确的,不知为啥报错?请老师指点一下


--  作者:有点甜
--  发布时间:2018/8/8 17:55:00
--  

1、把下面的删除,报什么错?

 

b.Build \'生成统计表
MainTable = Tables("统计表1") \'打开生成的统计表

 

2、做个例子发上来测试。


--  作者:susu312
--  发布时间:2018/8/8 18:04:00
--  
以下是引用有点甜在2018/8/8 17:55:00的发言:

1、把下面的删除,报什么错?

 

b.Build \'生成统计表
MainTable = Tables("统计表1") \'打开生成的统计表

 

2、做个例子发上来测试。


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

我马上做例子给您


--  作者:有点甜
--  发布时间:2018/8/8 18:23:00
--  
以下是引用susu312在2018/8/8 18:04:00的发言:


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

我马上做例子给您

 

是不是你列名不匹配,你数据库里面的列名不是英文来的么?你现在改成中文了明显不对。


--  作者:susu312
--  发布时间:2018/8/8 18:39:00
--  

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

麻烦老师了


--  作者:bohe
--  发布时间:2018/8/8 19:40:00
--  
你可以用系统自带的交叉统计功能生成一个看看里面的代码,你的统计代码不对,SQLCrossTableBuilder是对外部表的,你这是内部表,不是好好看看帮助吧
--  作者:susu312
--  发布时间:2018/8/8 20:25:00
--  
以下是引用bohe在2018/8/8 19:40:00的发言:
你可以用系统自带的交叉统计功能生成一个看看里面的代码,你的统计代码不对,SQLCrossTableBuilder是对外部表的,你这是内部表,不是好好看看帮助吧

你实现过这个功能么?


--  作者:有点甜
--  发布时间:2018/8/8 20:31:00
--  

1、

 

Dim b As New SQLCrossTableBuilder("统计表1","person")
For Each r As Row In Tables("统计1").Rows
    b.HGroups.AddDef(r("分组列")) \'添加列用于水平分组
Next

For Each r As Row In Tables("统计2").Rows
    b.VGroups.AddDef(r("分组列")) \'添加列用于水平分组
Next

For Each r As Row In Tables("统计3").Rows
    If r("统计类型") = "记录数"
        b.Totals.AddDef(r("统计列"),AggregateEnum.count) \'添加列用于统计
    ElseIf r("统计类型") = "累积值"
        b.Totals.AddDef(r("统计列"),AggregateEnum.sum) \'添加列用于统计
    End If
Next

b.Build \'生成统计表

 

 

2、是不是你列名不匹配,你数据库里面的列名不是英文来的么?你现在改成中文了明显不对。


--  作者:susu312
--  发布时间:2018/8/8 20:58:00
--  
以下是引用有点甜在2018/8/8 20:31:00的发言:

1、

 

Dim b As New SQLCrossTableBuilder("统计表1","person")
For Each r As Row In Tables("统计1").Rows
    b.HGroups.AddDef(r("分组列")) \'添加列用于水平分组
Next

For Each r As Row In Tables("统计2").Rows
    b.VGroups.AddDef(r("分组列")) \'添加列用于水平分组
Next

For Each r As Row In Tables("统计3").Rows
    If r("统计类型") = "记录数"
        b.Totals.AddDef(r("统计列"),AggregateEnum.count) \'添加列用于统计
    ElseIf r("统计类型") = "累积值"
        b.Totals.AddDef(r("统计列"),AggregateEnum.sum) \'添加列用于统计
    End If
Next

b.Build \'生成统计表

 

 

2、是不是你列名不匹配,你数据库里面的列名不是英文来的么?你现在改成中文了明显不对。

Dim nums1() As String={"sex","age","birth", _
                     "edu","workdate","politicalStatus", _
                     "retiredPost","title","leaOrRetire", _
                    "retireTime","proTecPost","partyTime", _
                     "organName","partyStanding","retiredDep"}
Dim nums2()  As String={"性别","年龄","出生年月", _
                     "学历","参加工作日期","政治面貌", _
                     "离退休职务","享受待遇","状态", _
                    "离退休时间","专业技术职务","入党时间", _
                     "单位","党龄","部门"}

 

Dim b As New SQLCrossTableBuilder("统计表1","person")
For Each r As Row In Tables("统计1").Rows
    int index1 As Integer=Array.indexof(r("分组列"))
    b.HGroups.AddDef("nums1(index1)")\'添加列用于水平分组
Next

For Each r As Row In Tables("统计2").Rows
    int index2 As Integer=Array.indexof(r("分组列"))
    b.VGroups.AddDef("nums1(index2)") \'添加列用于垂直分组
Next

For Each r As Row In Tables("统计3").Rows
    int index As Integer=Array.indexof(r("统计列"))
    b.Totals.AddDef("nums1(index3)", AggregateEnum.Count) \'添加列用于统计
Next

b.Build \'生成统计表

 

 

老师,我这样思路逻辑对了,但是报错:方法参数必须在括号中?


--  作者:有点甜
--  发布时间:2018/8/8 21:02:00
--  

Dim nums1() As String={"sex","age","birth", _
"edu","workdate","politicalStatus", _
"retiredPost","title","leaOrRetire", _
"retireTime","proTecPost","partyTime", _
"organName","partyStanding","retiredDep"}
Dim nums2()  As String={"性别","年龄","出生年月", _
"学历","参加工作日期","政治面貌", _
"离退休职务","享受待遇","状态", _
"离退休时间","专业技术职务","入党时间", _
"单位","党龄","部门"}

 

Dim b As New SQLCrossTableBuilder("统计表1","person")
For Each r As Row In Tables("统计1").Rows
    Dim index As Integer=Array.indexof(nums1,r("分组列"))
    b.HGroups.AddDef(nums1(index))\'添加列用于水平分组
Next

For Each r As Row In Tables("统计2").Rows
    Dim index As Integer=Array.indexof(nums1,r("分组列"))
    b.VGroups.AddDef(nums1(index)) \'添加列用于垂直分组
Next

For Each r As Row In Tables("统计3").Rows
    Dim index As Integer=Array.indexof(nums1,r("统计列"))
    b.Totals.AddDef(nums1(index), AggregateEnum.Count) \'添加列用于统计
Next

b.Build \'生成统计表