ORACLE的就不知道了 要是SQL SERVER的话直接CTE搞定。

解决方案 »

  1.   

    帮你移到oracle专区了,oracle同样有CTE功能,不过可能少许语法有点差异
      

  2.   

    SELECT  max(connect_by_root id_)id
    ,WM_CONCAT(ID_) ids
     FROM SYS_BUSINESS_A START WITH ID_ = 1
     CONNECT BY nocycle PRIOR ID_ = PID_ 
      

  3.   

    SELECT WM_CONCAT(ID_) FROM SYS_BUSINESS_A 
     CONNECT BY PRIOR ID_ = PID_   START WITH ID_ = 1换换顺序   行吗?
      

  4.   

    不好意思   我没表述清楚  系统从oracle要往sqlserver移植,我用oracle可以写出来查询某id下所有的子孙id(包括自己),可是sqlserver里我不会写
      

  5.   

    with t as
     (select 1 pid, 1 id, 1 name
        from dual
      union all
      select 1 pid, 2 id, 2 name
        from dual
      union all
      select 1 pid, 3 id, 3 name
        from dual
      union all
      select 1 pid, 4 id, 4 name
        from dual
      union all
      select 2 pid, 5 id, 5 name
        from dual)
    select r_nm, listagg(name, ',') within GROUP(ORDER BY rn)
      from (select name, rn, CONNECT_BY_ROOT(NAME) r_nm
              from (select t.*, rownum rn from t) t
             start with id = 1
            connect by prior id = pid
                   and id <> 1
             order by rownum)
     group by r_nm;
      

  6.   

    不好意思   我没表述清楚  系统从oracle要往sqlserver移植,我用oracle可以写出来查询某id下所有的子孙id(包括自己),可是sqlserver里我不会写还是移回sqlserver吧