我们有需求,我们需要显示所有的劳动力,材料,服务,工具与最大的工作订单的线成本之和。我写了这个查询,但是材料线成本的总和增加了一倍,有一个以上的服务线路成本。例如
馄饨- 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发布于 2014-09-03 18:52:47
WORKORDER表将为您计算这些值。以下字段是否没有提供所需的数据?
ACTINTLABCOST ACTLABCOST ACTLABCOST ACTOUTLABCOST ACTSERVCOST ACTTOOLCOST
ESTATAPPRINTLABCOST ESTATAPPRLABCOST ESTATAPPRLABCOST ESTATAPPRSERVCOST ESTINTLABCOST ESTATAPPRLABCOST ESTSERVCOST ESTTOOLCOST ESTINTLABCOST ESTATAPPRLABCOST ESTSERVCOST ESTTOOLCOST ESTINTLABCOST ESTATAPPRLABCOST ESTSERVCOST ESTTOOLCOST ESTINTLABCOST ESTATAPPRLABCOST ESTMATCOST
发布于 2014-09-01 13:42:35
问题是联接都在语句的顶层。这将导致每个工作顺序多行/多条记录。
一种解决方案是在两个独立的子select语句中计算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作为第二种方法,检查已包含此数据的列的工作表(最终会进行一些非规范化以提高性能)。
https://stackoverflow.com/questions/25605837
复制相似问题