树结构的统计请大家帮忙提供一个思路

big_net 2003-11-24 11:01:05
在以下的程序中我用我的思路统计3000个下线大约需要1分多钟的时间,我感觉这样的效率不是太好,想请教一下各位有没有更好的思路

业务需求:要求在一个传销模式的网中(即一个树状的结构),对所有的销售人员发放工资,或者是列出某个销售人员的所有下线(下线数超过几万,甚至更多)
发放工资的要求:该销售人员的销售额加上下线的销售额的和超过M(M为变量,该变量已经设置好金额)就可以发放工资
表结构:
销售人员的表(部分字段已经省略)
CREATE TABLE [dbo].[销售人员] (
[id] [decimal](18, 0) IDENTITY (1, 1) NOT NULL ,
[编号] [nvarchar] (20) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[名称] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[上线名称] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[上线编号] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
销售明细表
CREATE TABLE [dbo].[销售明细] (
[id] [decimal](18, 0) IDENTITY (1, 1) NOT NULL ,
[编号] [nvarchar] (20) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[销售金额] [money] NOT NULL ,
[录入时间] [datetime] NOT NULL ,
[上线编号] [nvarchar] (20) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
我的思路:
(1)列出某个销售人员的所有的下线
a.用一个递归函数把该销售人员所有下线的编号插入到一个临时表中
b.在销售人员数据窗口retrieve的时候 先setsqlselect("select * from 销售人员 where 销售人员.编号 in (select 编号 from 临时表 )")
其中递归函数的代码:
function uf_shopNode_count(string s_id)
s_sql="select 编号 from 销售人员 where 编号 ="+"'"+us_id+"'"
ds=uff_createDs(s_sql) //创建一个datastore,引用外部的函数
i_rowCount =ds.rowCount()
for i=1 to i_rowCount
s_id=ds.getItemString(i,"编号")
INSERT INTO 临时表
( id )
VALUES ( :s_id ) ;
uf_shopNode_count(s_id) //函数名称
next
end function
(2)发放工资的思路
a.用递归算出每个销售人员的总额,把编号和金额插入到临时表中
b.处理临时表中的数据,然后发放工资
问题:
如果用我现在的思路如果数据量比较大(超过几万),系统地速度会很慢
...全文
43 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
big_net 2003-11-27
  • 打赏
  • 举报
回复
谢谢 klbt(快乐白兔)
如果曾数不多,这个办法的确是个好办法。
可手头的程序管理一个很大的营销网络,在需求说明里提到该网络可能在覆盖全国很多地方,上万的销售人数肯定会有。编号的长度本身就不短,再加上层次数也不少,这个编号看来也不能短了。
klbt 2003-11-25
  • 打赏
  • 举报
回复
但如果下线数量成千上万那这个编号的位数也就成千上万了?
-------------------------------------------------------
我的意思你可能误解了,下线数量何以很多,但层次并不多。举例:10个下线:
01
0101
010101
010102
0102
010201
01020101
01020102
010202
01020201
01020202
其实只有三层,所以编码不会太长。
big_net 2003-11-25
  • 打赏
  • 举报
回复
哪位老大给指点一下阿!
hzhxxx 2003-11-24
  • 打赏
  • 举报
回复
建议使用存储过程
big_net 2003-11-24
  • 打赏
  • 举报
回复
klbt(快乐白兔):
我考虑过这种方式,但如果下线数量成千上万那这个编号的位数也就成千上万了?

hzhxxx(程序方程) :
我也从存储过程的方面考虑过,不过我在存储过程中用递归统计下线的时候没能实现(使用游标)。
不知道能不能描述的详细点
klbt 2003-11-24
  • 打赏
  • 举报
回复
关键在于编号规则设计,如果你用类似于01020304(每两位一层)的思路设计编号,甚至可以不用“上线编号”列,此时用数据窗口做统计易如反掌。
内容概要:本文介绍了软件定义汽车(SDV)的最佳实践案例,重点围绕基于Vector技术的电子电气(E/E)架构设计与实现。文档展示了高算力计算平台(HPC)、区域控制器(Zone ECU)和车载网络(如CAN、Ethernet)的系统架构布局,并结合AUTOSAR操作系统(Classic/Adaptive)、虚拟化(Hypervisor)和SOA服务设计,构建现代化车载系统。通过vCANdrive平台演示了从开发、测试(SIL/HIL)、到OTA升级的全流程,涵盖传感器、执行器、应用层软件及云端协同的集成方案。同时展示了硬件原型(如树莓派、Triboard)和MICROSAR系列工具链在实际项目中的应用。; 适合人群:从事汽车电子系统开发、车载软件架构设计以及智能网联汽车研发的工程师和技术管理人员,具备一定的嵌入式系统或AUTOSAR基础者更佳。; 使用场景及目标:①理解软件定义汽车的整体架构设计方法;②掌握基于Vector工具链的HPC与区域控制器集成方案;③实现OTA更新、SIL/HIL测试、ETH-CAN通信转换等关键技术验证;④支持智能驾驶(ADAS)与智能座舱(IVI)系统的快速原型开发。; 阅读建议:建议结合Vector相关工具(如PREEvision、CANoe4SW、MICROSAR)进行实践操作,重点关注系统分层设计、通信机制与软件更新流程,同时可参考文档中的硬件连接示意图与信号映射关系进行仿真与实车验证。

1,108

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder 相关问题讨论
社区管理员
  • 基础类社区
  • WorldMobile
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧