关于connect by查询语句中查询部分的累计问题

jimmylin040 2011-06-16 11:08:30
在计算多级BOM的时候,我们可能需要累计物料的损耗,所以要把子节点物料的损耗乘上父节点物料的损耗。
比如:
BOM level 损耗
FG 1 0.01
|-M1 2 0.02
|-M2 2 0.015
|-M2-1 3 0.01
|-M2-1.1 4 0.03


M2的损耗是 0.01×0.015,
M2-1的损耗是 0.01×0.015×0.01
M2-1.1的损耗是 0.01×0.015×0.01×0.03

假设SQL如下,如何在SQL中实现上面的损耗累计呢?

select material_code, level ,wast
from bom
start with parent_id = 1
connect by nocycle prior child_id = parent_id;
...全文
233 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
jimmylin040 2011-06-16
  • 打赏
  • 举报
回复
顶,树形结构排版出不来…………希望不影响吧
jimmylin040 2011-06-16
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 tangren 的回复:]
SQL code
SQL> desc bom
名称 是否为空? 类型
----------------------------------------- -------- ----------------------------
MATERIAL_CODE ……
[/Quote]
哇哦~~非常感谢~
tangren 2011-06-16
  • 打赏
  • 举报
回复
SQL> desc bom
名称 是否为空? 类型
----------------------------------------- -------- ----------------------------
MATERIAL_CODE VARCHAR2(20)
CHILD_ID VARCHAR2(20)
PARENT_ID VARCHAR2(20)
WAST NUMBER

SQL> select * from bom;

MATERIAL_CODE CHILD_ID PARENT_ID WAST
-------------------- -------------------- -------------------- ----------
FG FG 1 .01
M1 M1 FG .02
M2 M2 FG .015
M2-1 M2-1 M2 .01
M2-1.1 M2-1.1 M2-1 .03

SQL> SELECT material_code,
2 dbms_aw.eval_number(ltrim(sys_connect_by_path(wast, '*'), '*')) wast
3 FROM bom
4 START WITH parent_id = '1'
5 CONNECT BY nocycle PRIOR child_id = parent_id;

MATERIAL_CODE WAST
-------------------- ----------
FG .01
M1 .0002
M2 .00015
M2-1 .0000015
M2-1.1 .000000045

SQL>

3,494

社区成员

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

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