如果某个其他字段在Oracle中具有值,则如何显示字段的空值

时间:2014-09-01 12:26:32

标签: oracle10g

我们需要在Maximo中显示与工单相关的所有人工,材料,服务和工具的总成本之和。我已经编写了查询但是,物料线成本的总和增加了一倍,因为有多个服务线成本。 例如

  

wonum - 1234

     

材料生产线成本 - 10

     

服务项目费用 - 5和6(2条服务项目)

     

总材料生产线成本 - 20

     

总服务线费用 - 11

物料线成本总额是错误的。我使用了以下查询,请让我知道如何解决它

select a.wonum,a.description,a.location,a.crewid,a.worktype,a.wopriority,a.supervisor,a.actstart,a.siteid,sum(d.linecost) as totalmaterialcost,
sum(b.loadedcost)as totalservicecost
from workorder a
 left outer join matusetrans d
on  a.wonum=d.refwo and a.siteid=d.siteid
left outer join servrectrans b
 on  a.wonum=b.refwo and a.siteid=b.siteid
where a.wonum='1234' and a.siteid='ABC'
 group by a.wonum,a.description,a.location,a.crewid,a.worktype,a.wopriority,a.supervisor,a.actstart,a.siteid

2 个答案:

答案 0 :(得分:1)

问题是连接都在语句的顶层。这导致每个工作订单多行/记录。

一种解决方案是在两个单独的子选择语句中计算 matusetrans servrectrans 的总和。

示例:

select a.wonum, 
    b.sum as totalservicecost, 
    d.sum as totalmaterialcost
from workorder a
left join (
    select sum(b.loadedcost) as sum, b.siteid, b.refwo 
    from servrectrans b 
    group by b.siteid, b.refwo
) b on a.wonum = b.refwo and a.siteid = b.siteid
left join (
    -- second sum-select goes here
) d on -- second join condition goes here

作为第二种方法,检查workorder-table中已经包含此数据的列(最终会有一些去标准化以提高性能)。

答案 1 :(得分:0)

WORKORDER表将为您计算这些值。以下字段是否未提供您需要的数据?

ACTINTLABCOST ACTLABCOST ACTMATCOST ACTOUTLABCOST ACTSERVCOST ACTTOOLCOST

ESTATAPPRINTLABCOST ESTATAPPRLABCOST ESTATAPPRMATCOST ESTATAPPROUTLABCOST ESTATAPPRSERVCOST ESTATAPPRTOOLCOST ESTINTLABCOST ESTLABCOST ESTMATCOST ESTOUTLABCOST ESTSERVCOST ESTTOOLCOST