我现在有几个表:
A表字段: 
id,bid (id 为主键,bid外键)
1,2
1,3B表字段 :
id , name,parantid ( id 为主键,parantid 为父id )
1,'qwe',
2,'qwe1',1
3,'aa',2现在a表里面bid存的是b.id中的子id。
我想得到的结果是:
count(*),b.name( 这里的name 可能是跳了1级或者2级的父id所对应的id )
3           qwe

解决方案 »

  1.   

    SQL> with b as (
      2    select 1 id,'qwe'  name,null parentid from dual union all
      3    select 2 id,'qwe1' name,1    parentid from dual union all
      4    select 3 id,'aa'   name,2    parentid from dual)
      5  SELECT COUNT(*), NAME
      6    FROM (SELECT id, connect_by_root(b.name) NAME
      7            FROM b
      8           START WITH b.parentid IS NULL
      9          CONNECT BY PRIOR b.id = b.parentid)
     10   GROUP BY NAME;  COUNT(*) NAME
    ---------- ----
             3 qweSQL> 
      

  2.   


    我这里是求
    select count(a.id) ,b.name
    from a, b 
    where a.bid = b.id 我举例 错了 ,应该是得到
     count name 
       2   qwe
     
    不好意思。
      

  3.   


    select count(a.id) id ,
           max((select name from b
                where connect_by_isleaf =1
                start with a.bid=b.id
                connect by  b.id=prior b.parentid
            )) name
    from a, b  
    where a.bid = b.id