我原来遇到一个递归运算的问题,已经解决了。请见:http://community.csdn.net/Expert/topic/4199/4199860.xml?temp=.5139582但是现在遇到了和这个类似,但是比这个复杂的问题。就是在递归求和汇总的时候还要考虑乘法运算。也就是每个节点都有一个倍数数字:地区   人数   隶属于    倍数中国    3      null       1
北京    4      中国       2
四川    3      中国       3
昌平    7      北京       4
顺义    12     北京       5
绵阳    20     四川       6
成都    11     四川       7
成都    11     北京       8
郫县    7      成都       9
郫县    7      成都       9比如郫县的倍数数字是2,那么 计算隶属于北京的成都的人口时,这样算:7 * 9 + 11 =74而如果计算四川省人口时:(7*9+11)*7 + 20 * 6最后也是希望通过递归运算输出每个城市的人口数。
高手帮忙。谢谢!

解决方案 »

  1.   

    输出方式与http://community.csdn.net/Expert/topic/4199/4199860.xml?temp=.5139582
    要求相似。只是运算方法不一样。要考虑一个倍数。
      

  2.   

    试试这个行吗
    select a.district,a.times,a.num ,a.subject,      
           (select sum(num*times)
           from (select b.*,row_number() over(partition by district,subject order by subject) rn from test b) c 
           where rn = 1
           start with a.district = c.district 
           and nvl(a.subject,0) = nvl(c.subject,0)
           connect by prior district = subject)-
           (select distinct num*times-num from test where district=a.district and subject=a.subject )        
    from test a
      

  3.   

    写了一个递归函数:
    看一下有没有bug :)SQL> create or replace function f_demo(varea varchar2) return number
      2  as
      3    cursor c(v_area varchar2) is select distinct * from tt where 隶属于=v_area;
      4  v_num number:=0; 
      5  begin
      6    for cur in c(varea) loop
      7      v_num:=v_num+ (f_demo(cur.地区)+cur.人数)*cur.倍数;
      8    end loop;
      9    return v_num;
     10  end f_demo;
     11  /函数已创建。已用时间:  00: 00: 00.10
    SQL> select * from tt;地区             人数 隶属于           倍数
    ---------- ---------- ---------- ----------
    中国                3                     1
    北京                4 中国                2
    四川                3 中国                3
    昌平                7 北京                4
    顺义               12 北京                5
    绵阳               20 四川                6
    成都               11 四川                7
    成都               11 北京                8
    郫县                7 成都                9
    郫县                7 成都                9已选择10行。已用时间:  00: 00: 00.80
    SQL> select 地区,f_demo(地区)+人数 from tt;地区       F_DEMO(地区)+人数
    ---------- -----------------
    中国                    3294
    北京                     684
    四川                     641
    昌平                       7
    顺义                      12
    绵阳                      20
    成都                      74
    成都                      74
    郫县                       7
    郫县                       7已选择10行。已用时间:  00: 00: 00.01
    SQL>
      

  4.   

    SongZip的测试通过。马上结帖。大家有什么其他的方法和想法,发到这个帖子:
    http://community.csdn.net/Expert/topic/4204/4204552.xml?temp=.9830133我一开始就开了两个帖。
      

  5.   



    gongzip
    到这个帖子上留一下言可以吗?
    http://community.csdn.net/Expert/topic/4204/4204552.xml?temp=9.774417E-02我好放分结帖