有如下表结构:officeoffice_id(编号),office_name(名称),office_code(部门编码)有如下记录:
1 网络管理中心 3701XXXXXX
2 设备中心     370101XXXX
3 维护中心     370102XXXX
4 十楼机房     37010101XX
5 八楼机房     37010102XX具体部门如下:
   网络管理中心
       |_________设备中心
                     |_________十楼机房
                     |_________八楼机房
       |_________维护中心我想在列出表中记录的时候一并列出其父部门如下:
编号     一级部门          二级部门         三级部门
1      网络管理中心
2      网络管理中心       设备中心
3      网络管理中心       设备中心        十楼机房
4      网络管理中心       设备中心        八楼机房
5      网络管理中心       维护中心这个SQL语句,或者是View或者是存储过程该如何写?

解决方案 »

  1.   

    没有环境,我说下我的思路(有不对的还请指正),先运用行列转换,判断部门级别的时候,用函数截取code字段的相应字段来判断。
      

  2.   

    XXX是什么意思啊?可不可以去掉啊?
      

  3.   

    select (decode(substr(office_code,0,3),'3701','网络管理中心','') as 一级部门,
           (decode(substr(office_code,0,5),'370101,'设备中心','370102','维护中心','') as 二级部门,
           (decode(substr(office_code,0,7),'37010101,'十楼机房','37010102','八楼机房','') as 三级部门
    from office
    傻瓜答案,效率比较差
      

  4.   

    说起来有点搞笑,问个问题。
    例如如下记录:
    1 网络管理中心 3701XXXXXX 
    2 设备中心     370101XXXX 
    第一条的XXXXXX比如说是010000
    第二条的XXXX比如说是0000
    则这两条的编号ID就一样了,对不?
    也就是说我通过分析你的数据无法得出下面的树壮关系结构。
    除非你有特殊的规则,比如说XXXX代表的是字母之类。
    如果是那样的话我倒是有个思路可以供参考。
    首先用正则表达式解析出XXX...以外的部分,
    然后把它分以及他的不包含最后两位的部分作为父ID和子ID。
    使用connect by 作树形连接即可。
    太晚了实现回头再写吧!
      

  5.   


    SELECT T1.OFFICE_ID, T1.OFFICE_NAME, T2.OFFICE_NAME, T3.OFFICE_NAME
    FROM OFFICE T1, OFFICE T2, OFFICE T3
    WHERE T1.OFFICE_CODE = T2.OFFICE_ID(+)
    AND T2.OFFICE_CODE = T3.OFFICED_ID(+)
    ;
      

  6.   

    你这表应该设计成树形结构,能体现出父子关系的,就可以用connect by来实现