有一个树型控件的描述是:
   中国地区
        -广东
             -汕头
             -广州
             -深圳
        -福建
             -福州
                 -连江县
                 -闽清县对应的基表用:
   area mk  re  serno
   中国  0   国家     1
   广东  1   省份     1-2
   福建  1   省份     1-3
   汕头  2   地市     1-2-2
   广州  2   地市     1-2-3
   深圳  2    地市    1-2-4
   福州  3    地市    1-3-2
   连江县 2   县分    1-3-2-2
   闽清县 2   县分    1-3-2-3 现要求高手用一条SQL语句统计为以下结果:十分感谢!
 
   中国 广东 汕头
   中国 广东 广州
   中国 广东 深圳
   中国 福建 福州  连江县
   中国 福建 福州  闽清县
  高手高手高手,不用写过程可以实现吗????

解决方案 »

  1.   

    select ... from tablename start with 条件1 
    connect by 条件2 
    where 条件3;
      

  2.   

    你这个表设计的有问题,不是直接的树形结构
    其实你只要把表改成
    area mk  re  up_mk
      中国  0  国家     
      广东  1  省份   0
      福建 2  省份    0
      汕头  3  地市    1
      广州  4 地市    1
      深圳  5    地市    1
      福州  6    地市    2
      连江县 7  县分    6
      闽清县8  县分   6
      

  3.   

    scott@ORA1> select * from a;AREA               MK REMARK     SERNO
    ---------- ---------- ---------- --------------------
    中国                0 国家       1
    广东                1 省份       1-2
    福建                1 省份       1-3
    汕头                2 地市       1-2-2
    广州                2 地市       1-2-3
    深圳                2 地市       1-2-4
    福州                3 地市       1-3-2
    连江县              2 县分       1-3-2-2
    闽清县              2 县分       1-3-2-3已选择9行。scott@ORA1> SELECT a.*, level ln, sys_connect_by_path(area, ' ') x
      2    FROM
      3   (
      4    select a.*, case when length(serno) = 1 then null
      5     else substr(serno, 1, length(serno) - 2)
      6     end parent_serno
      7      from a
      8   ) a
      9  where CONNECT_BY_ISLEAF = 1
     10  connect by prior serno = parent_serno
     11   start with mk = 0
     12  ;AREA               MK REMARK     SERNO                PARENT_SER         LN X
    ---------- ---------- ---------- -------------------- ---------- ---------- -------------------------
    汕头                2 地市       1-2-2                1-2                 3  中国 广东 汕头
    广州                2 地市       1-2-3                1-2                 3  中国 广东 广州
    深圳                2 地市       1-2-4                1-2                 3  中国 广东 深圳
    连江县              2 县分       1-3-2-2              1-3-2               4  中国 福建 福州 连江县
    闽清县              2 县分       1-3-2-3              1-3-2               4  中国 福建 福州 闽清县
      

  4.   

    PS:1) 不是10g以上数据库别找我,有个connect_by_isleaf函数听说要在10g下才有。
    2) 才放20分,就要找真正的高手,少!
      

  5.   

     select t.*,level ,sys_connect_by_path(area, ' ') x
    from (select t.*, case when length(serno) = 1 then null
                            else substr(serno, 1, length(serno) - 2)
                         end parent_serno
           from t) t
           start with serno='1'
     connect by prior serno = parent_serno然后根据level过滤你想要的信息
      

  6.   

    问题解决,谢谢 codearts高手指导,因刚注册没什么分,可不是我小气了,帮助别人你就是OK的了,学习。。哈哈。。十分感谢。