我有一个表结构是这样的
aa     bb
----------
A      010+011+020+021
B      020+021+030+031
C      010+011+030+031
AA     010+011
BB     020+021
CC     030+031有没有什么办法通过一个SQL变为这样?
aa     bb
----------
A      AA+BB 
B      BB+CC
C      AA+CC
AA     010+011
BB     020+021
CC     030+031
谢谢了.

解决方案 »

  1.   

    错了~还有一行表示列
    aa     bb                 cc
    ----------------------------
    A      010+011+020+021     1
    B      020+021+030+031     1
    C      010+011+030+031     1
    AA     010+011             2
    BB     020+021             2
    CC     030+031             2
    aa     bb           cc
    --------------------------
    A      AA+BB         1
    B      BB+CC         1
    C      AA+CC         1
    AA     010+011       2
    BB     020+021       2
    CC     030+031       2
      

  2.   

    如果只有这两层,可以
    select c.aa,nvl(d.aa,c.bb),c.cc from t c,(select a.aa || '+' || b.aa aa,a.bb || '+' || b.bb bb,cc from t a,t b where a.cc=2 and b.cc=2) d where c.bb=d.bb(+)
      

  3.   

    谢谢 waterfirer(水清) 可以用~~谢谢
      

  4.   

    可是如果A由AA+BB+CC是不是要由3个表关联,如果这样的关系最多是由9个的话?是不是要关联9次?有简单点的方法么?
      

  5.   

    就是说AA BB DD都在A中。要是没可能出现这种情况还是有办法的。
      

  6.   

    不会的~~完整的表是这样的
    aa     bb                 cc
    ----------------------------
    A      010+011+020+021     1
    B      020+021+030+031     1
    C      010+011+030+031     1
    AA     010+011             2
    BB     020+021             2
    CC     030+031             2
    DD     040+041             2
    AA1    010                 3
    AA2    011                 3
    BB1    020                 3
    BB2    021                 3
    CC1    030                 3
    CC2    031                 3
    DD1    040                 3
    DD2    041                 3
      

  7.   

    拉倒吧,这个sql写出来也是淘汰的代码,否则后台处理就不用了。
      

  8.   

    select a.aa,select substr(max(sys_connect_by_path(b.aa,'+')),2) bb,a.cc
    from (select c.aa,rownum rn 
          from (select aa 
                from t where instr(a.bb,bb)<>0 and cc=a.cc+1) c 
          ) b
    connect by rn=rn-1 start with rn=1
    你试试吧
      

  9.   

    你是要表达数据的层次关系吧,为何不这样设计表呢?
    parent child
    ---------------
    A      AA
    A      BB
    B      BB
    B      CC
    AA     AA1
    AA     AA2
    ...
    AA1    010
    对于child没有对应parent的就认为是最底层结点。
    当然,不知道你要做什么,也不知这样是否适合你的需要。
      

  10.   

    楼主oracle是9i以上的吗?sys_connect_by_path 9i以上才能用