Foxtable(狐表)用户栏目专家坐堂 → [求助]


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

主题:[求助]

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


加好友 发短信
等级:小狐 帖子:341 积分:3406 威望:0 精华:0 注册:2013/5/17 10:55:00
[求助]  发帖心情 Post By:2016/3/2 15:04:00 [只看该作者]

关于根据外部数据生成目录树问题:
总体思路:1、根据“目录树"表生成目录树,利用此表生成节点的name
2.根据”目录文本“表生成目录树的标题,利用此表生成节点的text
3.根据”测试表“统计各节点的人数。

方法一:先根据”目录树“和”目录文本“两个表生成目录树,再按节点的name统计各节点的人数
此方法耗时:84.85秒

方法二:1、在”测试表“增加四列,按级别奖编制号进行拆分
2.按拆分的字段进行分组统计,生成统计表
3.根据目录树和目录文本两个表生成目录树
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:速度测试.rar

4.根据节点name,在统计表中提取相应节点下的人数
此方法:0.56秒。

想问:在”测试表“不额外增加四个字段的情况,如何改进代码或完善表结构,让方法一的时间接近方法二的时间。

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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/3/2 15:54:00 [只看该作者]

方法一:你可以先生成一个查询表,然后再统计

 

select 一级,二级,三级,四级, count(*) as 人数 fr om (Select mid(编制号,1,4) As 一级, mid(编制号,5,4) As 二级, mid(编制号,9,4) As 三级, mid(编制号,13,4) As 四级  fr om {测试表}) group by 一级,二级,三级,四级

 

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

 

方法二:你可以一级一级的算,也就是在目录树那里,显示到哪一级,再生成节点和统计节点个数。

 


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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/3/2 15:55:00 [只看该作者]


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


加好友 发短信
等级:小狐 帖子:341 积分:3406 威望:0 精华:0 注册:2013/5/17 10:55:00
[求助]  发帖心情 Post By:2016/3/2 16:18:00 [只看该作者]

没看明白,如果”测试表"没有”一级、二级、三级、四级“四列怎么处理?

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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/3/2 16:19:00 [只看该作者]

认认真真看2楼,生成一个查询表,就有 一级、二级、三级、四级了啊,根据 编制号 生成的啊。

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


加好友 发短信
等级:小狐 帖子:341 积分:3406 威望:0 精华:0 注册:2013/5/17 10:55:00
[求助]  发帖心情 Post By:2016/3/2 16:31:00 [只看该作者]

添加四列,用分组统计生成统计表
Dim dt As DataTable
Dim b As New SQLGroupTableBuilder("目录树用人员统计","基本信息")
b.C
b.Groups.AddDef("一级")
b.Groups.AddDef("二级")
b.Groups.AddDef("三级")
b.Groups.AddDef("四级")
b.Totals.AddDef("姓名",AggregateEnum.Count,"人数") '根据客户列来统计记录数,也就是订单数
dt = b.Build(False)

生成统计表耗时:0.5540

用临时表生成统计表
Dim q As new QueryBuilder
q.TableName = "人数统计"
q.C
q.SelectString = "select 一级,二级,三级,四级, count(*) as 人数 fr om (Select mid(编制号,1,4) As 一级, mid(编制号,5,4) As 二级, mid(编制号,9,4) As 三级, mid(编制号,13,4) As 四级  fr om {测试表}) group by 一级,二级,三级,四级"
q.Build
生成统计表耗时:1.20407
耗时相差两倍还多。还能不能再优化一下?


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


加好友 发短信
等级:小狐 帖子:341 积分:3406 威望:0 精华:0 注册:2013/5/17 10:55:00
[求助]  发帖心情 Post By:2016/3/2 16:33:00 [只看该作者]

对大红袍老师的耐心解答表示衷心感谢。

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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/3/2 16:34:00 [只看该作者]

 动态生成肯定慢,没办法。

 

 要不你就用方法二:显示到哪一级,就添加哪一级的节点。


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


加好友 发短信
等级:小狐 帖子:341 积分:3406 威望:0 精华:0 注册:2013/5/17 10:55:00
[求助]  发帖心情 Post By:2016/3/2 16:38:00 [只看该作者]

再次对大红袍老师的热情解答表示衷心感谢!

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


加好友 发短信
等级:小狐 帖子:341 积分:3406 威望:0 精华:0 注册:2013/5/17 10:55:00
[求助]  发帖心情 Post By:2016/3/2 17:17:00 [只看该作者]

又出问题了,
1.access数据源
Dim st As Date = Date.now
Dim q As new QueryBuilder
q.TableName = "人数统计"
q.C
q.SelectString = "select 一级,二级,三级,四级, count(*) as 人数 fr om (Select mid(编制号,1,4) As 一级, mid(编制号,5,4) As 二级, mid(编制号,9,4) As 三级, mid(编制号,13,4) As 四级  fr om {测试表}) group by 一级,二级,三级,四级"
q.Build
MainTable = Tables("人数统计")
MessageBox.show( "打开窗口用时:" & Format((Date.now - st).Totalseconds ,"0.00000") & "秒")
运行正常
2.sql数据源
Dim st As Date = Date.now
Dim q As new QueryBuilder
q.TableName = "目录树人数统计"
q.C
q.SelectString = "select 一级,二级,三级,四级, count(*) as 人数 fr om (Select mid(编制号,1,4) As 一级, mid(编制号,5,4) As 二级, mid(编制号,9,4) As 三级, mid(编制号,13,4) As 四级  fr om {基本信息}) group by 一级,二级,三级,四级"
q.Build
'MainTable = Tables("人数统计")
MessageBox.show( "打开窗口用时:" & Format((Date.now - st).Totalseconds ,"0.00000") & "秒")
出错,提示:
图片点击可在新窗口打开查看此主题相关图片如下:qq图片20160302162348.png
图片点击可在新窗口打开查看

 回到顶部
总数 16 1 2 下一页