本帖最后由 Mendax365 于 2012-09-11 23:47:32 编辑

解决方案 »

  1.   


    SQL> SELECT m1.root,
      2         SUM(m2.datavalue) sum_value,
      3         COUNT(*) cnt
      4    FROM (SELECT t.tid,
      5                 t.pid,
      6                 CONNECT_BY_ROOT(t.tid) root
      7            FROM treetable t
      8           START WITH t.pid = 1
      9          CONNECT BY PRIOR t.tid = t.pid) m1,
     10         datatable m2
     11   WHERE m1.tid = m2.tid
     12   GROUP BY m1.root
     13   ORDER BY m1.root;      ROOT  SUM_VALUE        CNT
    ---------- ---------- ----------
             2        115          4
             3         30          3
             4         45          2
      

  2.   

    呵呵,没具体实现,感觉差不多,不过那个  count(*) cnt 不会报错吧,可读性不是很好,不知道count的是那个表的数据
      

  3.   


    可读性不差啊,很清晰。以前没有用过 connect_by_root这个函数。这次学习了。谢谢。结贴