以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- [求助] (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=81635) |
||||
-- 作者:9602084 -- 发布时间:2016/3/2 15:04:00 -- [求助] 关于根据外部数据生成目录树问题: 总体思路:1、根据“目录树"表生成目录树,利用此表生成节点的name 2.根据”目录文本“表生成目录树的标题,利用此表生成节点的text 3.根据”测试表“统计各节点的人数。 方法一:先根据”目录树“和”目录文本“两个表生成目录树,再按节点的name统计各节点的人数 此方法耗时:84.85秒 方法二:1、在”测试表“增加四列,按级别奖编制号进行拆分 2.按拆分的字段进行分组统计,生成统计表 3.根据目录树和目录文本两个表生成目录树
4.根据节点name,在统计表中提取相应节点下的人数 此方法:0.56秒。 想问:在”测试表“不额外增加四个字段的情况,如何改进代码或完善表结构,让方法一的时间接近方法二的时间。
|
||||
-- 作者:大红袍 -- 发布时间: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
方法二:你可以一级一级的算,也就是在目录树那里,显示到哪一级,再生成节点和统计节点个数。
|
||||
-- 作者:大红袍 -- 发布时间:2016/3/2 15:55:00 -- 查询表生成器 http://www.foxtable.com/help/topics/0695.htm
|
||||
-- 作者:9602084 -- 发布时间:2016/3/2 16:18:00 -- [求助] 没看明白,如果”测试表"没有”一级、二级、三级、四级“四列怎么处理? |
||||
-- 作者:大红袍 -- 发布时间:2016/3/2 16:19:00 -- 认认真真看2楼,生成一个查询表,就有 一级、二级、三级、四级了啊,根据 编制号 生成的啊。 |
||||
-- 作者:9602084 -- 发布时间: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 -- 发布时间:2016/3/2 16:33:00 -- [求助] 对大红袍老师的耐心解答表示衷心感谢。 |
||||
-- 作者:大红袍 -- 发布时间:2016/3/2 16:34:00 -- 动态生成肯定慢,没办法。
要不你就用方法二:显示到哪一级,就添加哪一级的节点。 |
||||
-- 作者:9602084 -- 发布时间:2016/3/2 16:38:00 -- [求助] 再次对大红袍老师的热情解答表示衷心感谢! |
||||
-- 作者:9602084 -- 发布时间: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") & "秒") |