有个部门表dept(如下):code name
------------
01 公司
0101 办公室
0102 财务部
0103 销售部
010301 销售部1组
010302 销售部2组
......要求写个select语句,实现如下的效果(数据库分别是oracle9、10):code name parent_code
-----------------------------
01 公司
0101 办公室 01
0102 财务部 01
0103 销售部 01
010301 销售部1组 0103
010302 销售部2组 0103
------------
01 公司
0101 办公室
0102 财务部
0103 销售部
010301 销售部1组
010302 销售部2组
......要求写个select语句,实现如下的效果(数据库分别是oracle9、10):code name parent_code
-----------------------------
01 公司
0101 办公室 01
0102 财务部 01
0103 销售部 01
010301 销售部1组 0103
010302 销售部2组 0103
select NEXT_REPORT_M_ID from (
select aa.REPORT_M_ID NEXT_REPORT_M_ID, t.REPORT_M_ID from aa,
(select aa.*, kk.PARENT_CODE from aa left join kk on aa.ORG_CODE = kk.ORG_CODE) t
where aa.ORG_CODE = t.PARENT_CODE
) tmp
where aa.REPORT_M_ID=tmp.REPORT_M_ID
);
select code ,name,substr(code ,1,length(code )-2) parent_code from tb_xxx;
试一下。
(select '01' code,'公司' name from dual
union all
select '0101' code,'公司办公室' name from dual
union all
select '0102' code,'财务部' name from dual
union all
select '0103' code,'销售部' name from dual
union all
select '010301' code,'销售部1组' name from dual
union all
select '010302' code,'销售部2组' name from dual
union all
select '01030101' code,'销售部1组1号' name from dual
)
select t.code, t.name, a.code
from t, t a
where substr(t.code, 1, length(t.code) - 2) = a.code(+)
order by t.code;
(select '01' code,'公司' name from dual
union all
select '0101' code,'公司办公室' name from dual
union all
select '0102' code,'财务部' name from dual
union all
select '0103' code,'销售部' name from dual
union all
select '010301' code,'销售部1组' name from dual
union all
select '010302' code,'销售部2组' name from dual
union all
select '01030101' code,'销售部1组1号' name from dual
)
select t.code, t.name, a.code
from t, t a
where substr(t.code, 1, length(t.code) - 2) = a.code(+)
order by t.code;
code VARCHAR2(10),
NAME VARCHAR2(20)
);
INSERT INTO FOO VALUES('01','公司');
INSERT INTO FOO VALUES('0101','办公室');
INSERT INTO FOO VALUES('0102','财务部');
INSERT INTO FOO VALUES('0103','销售部');
INSERT INTO FOO VALUES('010301','销售部1组');
INSERT INTO FOO VALUES('010302','销售部2组');--前提:每个子部门的编号都是在父部门编号的基础上加2个数字
SELECT FOO.CODE,
FOO.NAME,
SUBSTR(FOO.CODE, 0, LENGTH(FOO.CODE) - 2) AS P_CODE
FROM FOO;结果:
01 公司
0101 办公室 01
0102 财务部 01
0103 销售部 01
010301 销售部1组 0103
010302 销售部2组 0103
CREATE TABLE foo(
code VARCHAR2(20),
NAME VARCHAR2(20)
);
INSERT INTO FOO VALUES('01x','公司');
INSERT INTO FOO VALUES('01x01aaa','办公室');
INSERT INTO FOO VALUES('01x02bbbb','财务部');
INSERT INTO FOO VALUES('01x03cccccc','销售部');
INSERT INTO FOO VALUES('01x03cccccc01d','销售部1组');
INSERT INTO FOO VALUES('01x03cccccc02','销售部2组');SELECT A.CODE, A.NAME,MAX(B.CODE) AS P_CODE
FROM FOO A, FOO B
WHERE INSTR(A.CODE, B.CODE) > 0
AND A.CODE <> B.CODE
GROUP BY A.CODE,A.NAME
ORDER BY 1结果:
01x01aaa 办公室 01x
01x02bbbb 财务部 01x
01x03cccccc 销售部 01x
01x03cccccc01d 销售部1组 01x03cccccc
01x03cccccc02 销售部2组 01x03cccccc