我有这样一个表,数据是一棵树,但是树中有相同的节点(相当于公用节点):地区   人数   隶属于    序号中国    3      null       1
北京    4      中国       2
四川    3      中国       3
昌平    7      北京       4
顺义    12     北京       5
绵阳    20     四川       6
成都    11     四川       7
成都    11     北京       8
郫县    7      成都       9
郫县    7      成都       10
大家可以看到这里边有重复数据,原因是。成都即属于四川,又属于北京。这样成都有两条记录。同理,成都下属的所有节点都会原封不动的复制了一份。就这样的一个数据库(原始数据,我们无法更改的),我们要统计它。关键是计算成都人口的时候不能将两个郫县的都包含了。只能取其中一个来算。请问用
connect by prior id=pid start with id=??
能解决吗?如果解决不了?该如何解决呢?高手指点下面是想生成的结果样式。想得出这样的结果:地区    总人数
中国    85
北京    41
四川    41
昌平    7
顺义    12
绵阳    20
成都     18
成都     18
郫县     7
郫县     7

解决方案 »

  1.   

    select t1.region,
           (select sum(num) 
           from (select t.*,row_number() over(partition by region,partof order by partof) rn from b t) t2 
           where rn = 1
           start with t1.region = t2.region 
           and nvl(t1.partof,0) = nvl(t2.partof,0)
           connect by prior region = partof) 
    from b t1SQL> 
      9  /REGION     (SELECTSUM(NUM)FROM(SELECTT.*,
    ---------- ------------------------------
    中国                                   85
    北京                                   41
    四川                                   41
    昌平                                    7
    顺义                                   12
    绵阳                                   20
    成都                                   18
    成都                                   18
    郫县                                    7
    郫县                                    710 rows selected