有个表A中有数据如下
gfid gfname
01 档案查阅
01.01 档案阅览
01.01.1 导出
01.01.2 打印
01.01.3 收藏
01.02 目录浏览
01.03 档案查询
01.04 全文检索
02 档案借阅
02.01 借阅办理
02.01.1 借出
02.01.2 归还
………………怎么读出来生成符合树控件的包含父id数据
gfid gfname parentId
01 档案查阅 0
01.01 档案阅览 01
01.01.1 导出 01.01
01.01.2 打印 01.01
01.01.3 收藏 01.01
01.02 目录浏览 01
01.03 档案查询 01
01.04 全文检索 01
02 档案借阅 0
02.01 借阅办理 02
02.01.1 借出 02.01
02.01.2 归还 02.01
………………
已有的数据,不能改数据库结构了,只能自己补齐先天的不足。高手指点一下谢谢。
gfid gfname
01 档案查阅
01.01 档案阅览
01.01.1 导出
01.01.2 打印
01.01.3 收藏
01.02 目录浏览
01.03 档案查询
01.04 全文检索
02 档案借阅
02.01 借阅办理
02.01.1 借出
02.01.2 归还
………………怎么读出来生成符合树控件的包含父id数据
gfid gfname parentId
01 档案查阅 0
01.01 档案阅览 01
01.01.1 导出 01.01
01.01.2 打印 01.01
01.01.3 收藏 01.01
01.02 目录浏览 01
01.03 档案查询 01
01.04 全文检索 01
02 档案借阅 0
02.01 借阅办理 02
02.01.1 借出 02.01
02.01.2 归还 02.01
………………
已有的数据,不能改数据库结构了,只能自己补齐先天的不足。高手指点一下谢谢。
select
gfid,
gfname,
case instr(gfid, '.', -1, 1) when 0 then '0' else substr(gfid, 0,instr(gfid, '.', -1, 1)-1) end as parentid
from testtable98
order by gfid
=>
decode(instr(gfid, '.', -1, 1),0 , '0' , substr(gfid, 0,instr(gfid, '.', -1, 1)-1)) as parentid
SELECT '01' AS GFID,'档案查阅' AS GFNAME FROM DUAL UNION ALL
SELECT '01.01','档案阅览' AS GFNAME FROM DUAL UNION ALL
SELECT '01.01.1','导出' AS GFNAME FROM DUAL UNION ALL
SELECT '01.01.2','打印' AS GFNAME FROM DUAL UNION ALL
SELECT '01.01.3','收藏' AS GFNAME FROM DUAL UNION ALL
SELECT '01.02','目录浏览' AS GFNAME FROM DUAL UNION ALL
SELECT '01.03','档案查询' AS GFNAME FROM DUAL UNION ALL
SELECT '01.04','全文检索' AS GFNAME FROM DUAL UNION ALL
SELECT '02','档案借阅' AS GFNAME FROM DUAL UNION ALL
SELECT '02.01','借阅办理' AS GFNAME FROM DUAL UNION ALL
SELECT '02.01.1','借出' AS GFNAME FROM DUAL UNION ALL
SELECT '02.01.2','归还' AS GFNAME FROM DUAL
)
SELECT CASE
WHEN LENGTH(GFID) - LENGTH(REPLACE(GFID,'.')) = 0 THEN '0'
WHEN LENGTH(GFID) - LENGTH(REPLACE(GFID,'.')) = 1 THEN REGEXP_SUBSTR(GFID,'[^.]+',1,1)
WHEN LENGTH(GFID) - LENGTH(REPLACE(GFID,'.')) = 2 THEN REGEXP_SUBSTR(GFID,'[^.]+',1,2)
END AS PID,
CASE
WHEN LENGTH(GFID) - LENGTH(REPLACE(GFID,'.')) = 0 THEN GFID
WHEN LENGTH(GFID) - LENGTH(REPLACE(GFID,'.')) = 1 THEN REGEXP_SUBSTR(GFID,'[^.]+',1,2)
WHEN LENGTH(GFID) - LENGTH(REPLACE(GFID,'.')) = 2 THEN REGEXP_SUBSTR(GFID,'[^.]+',1,3)
END AS GID,
GFID,GFNAME
FROM T;
PID GID GFID GFNAME
0 01 01 档案查阅
01 01 01.01 档案阅览
01 1 01.01.1 导出
01 2 01.01.2 打印
01 3 01.01.3 收藏
01 02 01.02 目录浏览
01 03 01.03 档案查询
01 04 01.04 全文检索
0 02 02 档案借阅
02 01 02.01 借阅办理
01 1 02.01.1 借出
01 2 02.01.2 归还
(select '01','档案查阅' from dual
union select '01.01 ',' 档案阅览' from dual
union select '01.01.1',' 导出 ' from dual
union select '01.01.2',' 打印 ' from dual
union select '01.01.3',' 收藏 ' from dual
union select '01.02 ',' 目录浏览' from dual
union select '01.03 ',' 档案查询' from dual
union select '01.04 ',' 全文检索' from dual
union select '02 ',' 档案借阅' from dual
union select '02.01 ',' 借阅办理' from dual
union select '02.01.1',' 借出 ' from dual
union select '02.01.2',' 归还 ' from dual);commit;select gfid,gfname,nvl(substr(gfid,1,instr(gfid,'.',-1)-1),0) pgfid from tree;