日期:2014-05-17  浏览次数:20790 次

求一oracle树数据sql
有个表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
………………
已有的数据,不能改数据库结构了,只能自己补齐先天的不足。高手指点一下谢谢。

------解决方案--------------------
select s.*,decode(substr(gfid,0,instr(gfid,'.',-1)-1),null,0,substr(gfidid,0,instr(gfid,'.',-1)-1)) from tablename s

这样试试
------解决方案--------------------
01.01.2 解析出父子关系即可
------解决方案--------------------
好吧,从表结构上来说,确实不合理。但办法总归有的:
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


------解决方案--------------------
case instr(gfid, '.', -1, 1) when 0 then '0' else substr(gfid, 0,instr(gfid, '.', -1, 1)-1) end as parentid
=>
decode(instr(gfid, '.', -1, 1),0 , '0' , substr(gfid, 0,instr(gfid, '.', -1, 1)-1)) as parentid
------解决方案--------------------
引用:
有个表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 归还
 ………………

怎……



WITH T AS(
  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