有如下表结构:officeoffice_id(编号),office_name(名称),office_code(部门编码)有如下记录:
1 网络管理中心 3701XXXXXX
2 设备中心 370101XXXX
3 维护中心 370102XXXX
4 十楼机房 37010101XX
5 八楼机房 37010102XX具体部门如下:
网络管理中心
|_________设备中心
|_________十楼机房
|_________八楼机房
|_________维护中心我想在列出表中记录的时候一并列出其父部门如下:
编号 一级部门 二级部门 三级部门
1 网络管理中心
2 网络管理中心 设备中心
3 网络管理中心 设备中心 十楼机房
4 网络管理中心 设备中心 八楼机房
5 网络管理中心 维护中心这个SQL语句,或者是View或者是存储过程该如何写?
1 网络管理中心 3701XXXXXX
2 设备中心 370101XXXX
3 维护中心 370102XXXX
4 十楼机房 37010101XX
5 八楼机房 37010102XX具体部门如下:
网络管理中心
|_________设备中心
|_________十楼机房
|_________八楼机房
|_________维护中心我想在列出表中记录的时候一并列出其父部门如下:
编号 一级部门 二级部门 三级部门
1 网络管理中心
2 网络管理中心 设备中心
3 网络管理中心 设备中心 十楼机房
4 网络管理中心 设备中心 八楼机房
5 网络管理中心 维护中心这个SQL语句,或者是View或者是存储过程该如何写?
(decode(substr(office_code,0,5),'370101,'设备中心','370102','维护中心','') as 二级部门,
(decode(substr(office_code,0,7),'37010101,'十楼机房','37010102','八楼机房','') as 三级部门
from office
傻瓜答案,效率比较差
例如如下记录:
1 网络管理中心 3701XXXXXX
2 设备中心 370101XXXX
第一条的XXXXXX比如说是010000
第二条的XXXX比如说是0000
则这两条的编号ID就一样了,对不?
也就是说我通过分析你的数据无法得出下面的树壮关系结构。
除非你有特殊的规则,比如说XXXX代表的是字母之类。
如果是那样的话我倒是有个思路可以供参考。
首先用正则表达式解析出XXX...以外的部分,
然后把它分以及他的不包含最后两位的部分作为父ID和子ID。
使用connect by 作树形连接即可。
太晚了实现回头再写吧!
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(+)
;