日期:2014-05-17  浏览次数:20543 次

提成计算!求助!给个思路也好!
目前我能查出以下结构
id为当前用户的编号,pid为当前用户的上级用户id,lv为当前用户的等级,iden是我自定义标识列。
需求是要计算所有人提成分红,假设第一个人的收入是1000,那么他的上级根据lv可以提成6%,3%,1%不同的提成,这个上下级关系有可能无限极,并且6%提成职位的人只能提取自己子代6代内子代的收入提成,3%提成职位的人能够提成自己子代9代内的所有人收入的3%,1%的职位人员可以取自己下面无限代的提成1%.

所以每个人的收入分成两部份,一个是从下面子代中提到多少,二是被上面的人提走多少。
怎么去存储那么多的数据上查又下查?
拜求大神指点!!谢谢!!!!!
无限级提成计算

------解决方案--------------------

--测试数据  
CREATE TABLE t_A  
(ID int,name VARCHAR(6),ParentID int)  
INSERT INTO t_A  
SELECT 1,'aa',0  
UNION ALL  
SELECT 2,'bb',0  
UNION ALL  
SELECT 3,'cc',1  
UNION ALL  
SELECT 4,'dd',3  
  
  
go  
  
--求个节点下所有子节点:  
create function f_cid(@id int)  
returns varchar(500)  
as  
begin  
     declare @t table(id int,desn varchar(10),parentid int ,lev int)  
     declare @lev int  
     set @lev=1  
     insert into @t select *,@lev from  t_A where id=@id  
     while(@@rowcount>0)  
     begin  
          set @lev=@lev+1  
          insert into @t select a.*,@lev from t_A a,@t b  
          where a.parentid=b.id and b.lev=@lev-1  
     end  
     declare @cids varchar(500)  
     select @cids=isnull(@cids+'-','')+ltrim(id) from @t order by lev  
     return @cids  
end  
go  
  

--自定义函数方式实现子节点查询父节点  
if OBJECT_ID('GetParentID') is not null drop function GetParentID  
go  
create function GetParentID(@ChildID int)  
returns varchar(500) 
as  
  begin  
     declare @t table(ParentID int)  
     insert into @t select Pare