如果有可能的话,把数据库重新设计一下,让代理ID的编码有意义,分出层次。例如:代理ID    姓名    积分   上级代理ID
        01        a      123       00
        010302    b      32        0103
        0103      c      55        01
        0504      d      88        05
        05        e      115       00
        050406    f       9        0504

解决方案 »

  1.   

    create table a
    (代理ID  int,
    用户姓名  varchar(10),
    积分  int,
    上级代理ID int)
    insert a
    select 1,'张三',123,0 union
    select 2,'李四',32,3 union
    select 3,'王五',55,1 union
    select 4,'赵六',88,5 union
    select 5,'小军',115,0 union
    select 6,'小敏',9,4 union
    select 7,'小强',54,6 union
    select 8,'王六',100,7 union
    select 9,'天红',20,6--原始数据:
    代理ID        用户姓名       积分          上级代理ID      
    ----------- ---------- ----------- ----------- 
    1           张三         123         0
    2           李四         32          3
    3           王五         55          1
    4           赵六         88          5
    5           小军         115         0
    6           小敏         9           4
    7           小强         54          6
    8           王六         100         7
    9           天红         20          6(所影响的行数为 9 行)
    select b.*,isnull((select (case 上级代理ID when 0 then 代理ID else 上级代理ID end) from a where a.代理ID=b.上级代理ID),代理ID) upid1  into #a from a b
    select b.*,(select (case 上级代理ID when 0 then 代理ID else 上级代理ID end) from #a where #a.代理ID=b.upid1) upid2 into #aa from #a b
    select b.*,(select (case 上级代理ID when 0 then 代理ID else 上级代理ID end) from #aa where #aa.代理ID=b.upid2) upid3 into #aaa from #aa b--层数每多一层就增加一行类似上面的语句.select * from #aaa代理ID        用户姓名       积分          上级代理ID      upid1       upid2       upid3       
    ----------- ---------- ----------- ----------- ----------- ----------- ----------- 
    1           张三         123         0           1           1           1
    2           李四         32          3           1           1           1
    3           王五         55          1           1           1           1
    4           赵六         88          5           5           5           5
    5           小军         115         0           5           5           5
    6           小敏         9           4           5           5           5
    7           小强         54          6           4           5           5
    8           王六         100         7           6           4           5
    9           天红         20          6           4           5           5(所影响的行数为 9 行)select upid3 as 代理ID,sum(积分) from #aaa group by upid3代理ID        总积分         
    ----------- ----------- 
    1           210
    5           386(所影响的行数为 2 行)