我正在与我的 DBA 合作,尝试找到一种方法来汇总与工单相关的所有成本。由于任何工作订单都可以有多个子工作订单(通过多个“代”)以及相关工作订单(通过 RELATEDRECORDS 表),因此我需要能够获取所有子工作订单和相关工作订单的 ACTLABORCOST 和 ACTMATERIALCOST 字段的总计工作订单(以及每个子工作订单和相关工作订单)。我已经通过分层查询(使用 CONNECT BY PRIOR)来获取所有子项、孙子项等,但我陷入了相关的工作订单中。由于每个工作订单都可以有一个相关的工作订单及其自己的子工作订单和相关工作订单,因此我需要一个 Oracle 函数来深入了解子工作订单和相关工作订单及其子工作订单和相关工作订单。因为我认为这应该是相当普遍的事情,所以我希望有人已经做到了这一点并且可以分享他们所做的事情。
最佳答案
另一个选择是递归查询,正如 Francisco Sitja 所建议的那样。由于我的 Oracle 不允许使用 2 个 UNION ALL,因此我必须在两个子查询中联合到 WOANCESTOR 表,而不是专用一个 UNION ALL 来执行 WO 层次结构。然后我就可以使用允许的 UNION ALL
来执行 RELATEDRECORD 层次结构。而且它似乎运行得很快。
with mywos (wonum, parent, taskid, worktype, description, origrecordid, woclass, siteid) as (
-- normal WO hierarchy
select wo.wonum, wo.parent, wo.taskid, wo.worktype, wo.description, wo.origrecordid, wo.woclass, wo.siteid
from woancestor a
join workorder wo
on a.wonum = wo.wonum
and a.siteid = wo.siteid
where a.ancestor = 'MY-STARTING-WONUM'
union all
-- WO hierarchy associated via RELATEDRECORD
select wo.wonum, wo.parent, wo.taskid, wo.worktype, wo.description, wo.origrecordid, wo.woclass, wo.siteid
from mywos
join relatedrecord rr
on mywos.woclass = rr.class
and mywos.siteid = rr.siteid
and mywos.wonum = rr.recordkey
-- prevent cycle / going back up the hierarchy
and rr.relatetype not in ('ORIGINATOR')
join woancestor a
on rr.relatedrecsiteid = a.siteid
and rr.relatedreckey = a.ancestor
join workorder wo
on a.siteid = wo.siteid
and a.wonum = wo.wonum
)
select * from mywos
;
关于oracle - MAXimo 工单总人工成本和总 Material 成本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57083667/