再请教一个问题,如何找父节点?

happyct 2014-07-16 08:28:09
表记录:

1002
100201
1002018523532
100201435X46413
100202
1002026335332
2001
200101
200102

我要一个sql语句,能找到每个节点的父节点,目标如下:

节点 父节点
1002 null
100201 1002
1002018523532 100201
100201435X46413 100201
100202 1002
1002026335332 100202
2001 null
200101 2001
200102 2001
更多 0
...全文
191 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
firstwizard 2014-07-16
  • 打赏
  • 举报
回复
引用 2 楼 firstwizard 的回复:
[quote=引用 楼主 happyct 的回复:] 表记录: 1002 100201 1002018523532 100201435X46413 100202 1002026335332 2001 200101 200102 我要一个sql语句,能找到每个节点的父节点,目标如下: 节点 父节点 1002 null 100201 1002 1002018523532 100201 100201435X46413 100201 100202 1002 1002026335332 100202 2001 null 200101 2001 200102 2001 更多 0

/*假设表为A,字段为:节点 z_id;父节点:fa_id*/
select lpad('+',level,' ')||ename from A
     connect by prior z_id = fa_id 
     start with fa_id is null;
[/quote]

改正一下,开始理解错了
/*假设表为A,字段为:节点 z_id;父节点:fa_id*/
select z_id,decode(sign(length(z_id)-4),0,null,
decode(sign(length(z_id-6)),0,substr(z_id,1,4),1,substr(z_id,1,6))) fa_id from A;
具体需要截取几位可以在substr里修改,也可以增加decode里边的内容
小灰狼W 2014-07-16
  • 打赏
  • 举报
回复
select acct_code, (select max(acct_code) from t y where x.acct_code like y.acct_code||'_%') parent_acct_code from t x
firstwizard 2014-07-16
  • 打赏
  • 举报
回复
引用 楼主 happyct 的回复:
表记录: 1002 100201 1002018523532 100201435X46413 100202 1002026335332 2001 200101 200102 我要一个sql语句,能找到每个节点的父节点,目标如下: 节点 父节点 1002 null 100201 1002 1002018523532 100201 100201435X46413 100201 100202 1002 1002026335332 100202 2001 null 200101 2001 200102 2001 更多 0

/*假设表为A,字段为:节点 z_id;父节点:fa_id*/
select lpad('+',level,' ')||ename from A
     connect by prior z_id = fa_id 
     start with fa_id is null;
happyct 2014-07-16
  • 打赏
  • 举报
回复
模拟记录语句贴出,省得给帮助的好兄弟们自己再敲一遍: select '1002' ACCT_CODE from dual union all select '100201' ACCT_CODE from dual union all select '100201债券1' ACCT_CODE from dual union all select '100201债券2' ACCT_CODE from dual union all select '100202' ACCT_CODE from dual union all select '100202股票3' ACCT_CODE from dual union all select '2001' ACCT_CODE from dual union all select '200101' ACCT_CODE from dual union all select '200102' ACCT_CODE from dual

3,491

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧