一表结构如下:tbAB_ID    B_NAME    B_PID
---------------------------
1       一厂      0
2       二厂      0
3       技术科    1
4       生产科    2
希望的查询结果为:B_ID    B_NAME      所属      
-----------------------------
1       一厂      无
2       二厂      无
3       技术科    一厂
4       生产科    二厂
     

解决方案 »

  1.   

    select a.B_ID,a.B_NAME,nvl(b.B_NAME,'无') from tba a,tba b
    where a.b_pid=b.b+id(+)
      

  2.   

    select a.B_ID,a.B_NAME,nvl(b.B_NAME,'无') from tba a,tba b
    where a.b_pid=b.b_id(+) 
      

  3.   

    一早就看见minitoy忙碌身影鼓掌WITH tba AS(
    SELECT '1' b_id,'一厂' B_NAME,'0' B_PID FROM dual
    UNION ALL
    SELECT '2','二厂','0' FROM dual
    UNION ALL
    SELECT '3','技术科','1' FROM dual
    UNION ALL
    SELECT '4','生产科','2' FROM dual
    )
    select a.B_ID,a.B_NAME,nvl(b.B_NAME,'无') 所属 from tba a,tba b
    where a.b_pid=b.b_id(+) ORDER BY a.B_ID;结果:
    B_ID   B_NAME   所属
    ---------------------
    1      一厂      无  
    2      二厂      无  
    3      技术科    一厂
    4      生产科    二厂
      

  4.   

    with a as(
    select b_id,bname,decode(bname,kk,'无',rtrim(kk,'--->'||bname)) 所属 from(
    select b_id,bname,b_pid,ltrim(sys_connect_by_path(bname,'--->'),'--->') kk from a
    START with NOT EXISTS(select 1 from a b where b.b_id=a.b_pid) 
    connect by prior b_id = b_pid
    )
      

  5.   


    with temp as
     (select 1 id, '一厂' name, 0 pid
        from dual
      union all
      select 2 id, '二厂' name, 0 pid
        from dual
      union all
      select 3 id, '技术科' name, 1 pid
        from dual
      union all
      select 4 id, '生产科' name, 2 pid from dual
      )
    select t.id, t.name, decode(t.pid, 0, '无',(select t1.name from temp t1 where t1.id = t.pid))
      from temp t;
      

  6.   

    顶,这个
    select a.b_id,a.b_name,nvl(b.b_name,'无') from tba a,tba b
    where a.b_pid = b.b_id(+);