有一表中的记录如下
                 id             parentid
1        12528        0
2        13135        12528
3        14739        12528
4        12533        12528
5        12521        12528
6        12879        12528
7              12555        13135
8              22340        0
9              12333        22340
10            10234        22340
我要的结果是
1  12528      6
2  22340      2
就是要统计出parentid为0的记录下的子记录个数
类似于统计公司各个部门的员工总数

解决方案 »

  1.   

    SELECT substr(id_path, 2, instr(id_path, '/', 2) - 2) id, COUNT(*)
    FROM   (SELECT t.*, sys_connect_by_path(id, '/') id_path
            FROM   t
            START  WITH parentid = 0
            CONNECT BY PRIOR id= parentid) tt
    WHERE  tt.parentid <> 0
    GROUP  BY substr(id_path, 2, instr(id_path, '/', 2) - 2)
      

  2.   

    上面写法要求oracle是9i以上版本,10G下大概可以这么写,没测试过,可以试试看
    select top_id,count(*)
     from   (SELECT t.*, CONNECT_BY_ROOT id as top_id 
            FROM   t 
            START  WITH parentid = 0 CONNECT BY PRIOR id= parentid)
    group by top_id