我在做BI的时候,建立维度表的时候碰上这样一种情况:
pk    code    name    
1     01      1
2     02      2
3     0101    3
4     0102    4
5     0201    5
要求查询完成后的表结构是:
pk    code_lvl1     name_lvl1    code_lvl2     name_lvl2
1     01            1            0101          3
2     01            1            0102          4
3     02            2            0201          5
注:所以字段都按字符串处理就行

解决方案 »

  1.   

    没人顶,自己顶,再加个要求。
    如果下面还有第三、第四……怎么办?
    注:每层的CODE用2位数字表示,十位补0
      

  2.   

    select rownum,aa.code,aa.name,bb.code,b.name
    from table_name aa,table_name bb
    where instr(bb.code,aa.code) = 1 and length(bb.code) > length(aa.code)
      

  3.   

    select * from test_t;
    1 1 01 1
    2 2 02 2
    3 3 0101 3
    4 4 0102 4
    5 5 0201 5
    select a.pk,a.code,a.name,b.pk,b.code,b.name 
    from
    (select pk,code,name from test_t where length(code)=2) a,
    (select pk,code,name,substr(code,1,2) pcode from test_t where length(code)=4) b
    where a.code=b.pcode;1 1 01 1 3 0101 3
    2 1 01 1 4 0102 4
    3 2 02 2 5 0201 5
      

  4.   

    如果最长的code不确定的话,一个语句是没法实现的,写循环吧