我有这样一个表,数据是一棵树:地区   人数   隶属于中国    3      null
北京    4      中国
四川    3      中国
昌平    7      北京
顺义    12     北京
绵阳    20     四川
德阳    12     四川想得出这样的结果:地区    总人数
中国    61
北京    23
四川    35
昌平    7
顺义    12
绵阳    20
德阳    12这些地区的层次不止三层,可能很多层。
每个地区都有数据。也就是非叶子节点也有数据。不能忽略。高手帮忙指点。谢谢。

解决方案 »

  1.   

    SQL> select * from b;REGION                      NUM PARTOF
    -------------------- ---------- --------------------
    中国                          3 
    北京                          4 中国
    四川                          3 中国
    昌平                          7 北京
    顺义                         12 北京
    绵阳                         20 四川
    德阳                         12 四川7 rows selectedselect t1.region,
           (select sum(num) 
           from b t2 
           start with t1.region = t2.region 
           connect by prior region = partof) 
    from b t1SQL> 
      7  /REGION               (SELECTSUM(NUM)FROMBT2STARTWIT
    -------------------- ------------------------------
    中国                                             61
    北京                                             23
    四川                                             35
    昌平                                              7
    顺义                                             12
    绵阳                                             20
    德阳                                             127 rows selected
      

  2.   

    SQL> select * from tt;AREA              PEO BEL
    ---------- ---------- ----------
    中国                3
    北京                4 中国
    四川                3 中国
    昌平                7 北京
    顺义               12 北京
    绵阳               20 四川
    德阳               12 四川已选择7行。已用时间:  00: 00: 00.30
    SQL> select area,
      2  (select sum(peo) from tt start with tt.area=t.area connect by prior tt.area=tt.bel) su
      3  from tt t;AREA               SU
    ---------- ----------
    中国               61
    北京               23
    四川               35
    昌平                7
    顺义               12
    绵阳               20
    德阳               12已选择7行。已用时间:  00: 00: 00.30
    SQL>