2017-10-16 39 views
1

我有一个包含人工,设备和材料的3个相关表格的工作订单表格。我试图通过WorkOrderID来总结3个项目和组的成本。我知道直接连接会乘以所有结果,所以我需要使用子查询,但我无法弄清楚如何编写任何子查询。从3个相关表格总计到父表格 - SQL

下面是断开的直接连接查询。我已经尝试了几个子查询并不断得到相乘结果。任何帮助是极大的赞赏。谢谢。

select wo.workorderid, sum(lab.cost) as labcost, sum(mat.cost) as matCost, sum(eq.cost) as eqcost 
from WORKORDER as wo 
    join LABORCOSTACT as lab 
on lab.WORKORDERID = wo.WORKORDERID 
    join MATERIALCOSTACT as mat 
on mat.WORKORDERID = wo.WORKORDERID 
    join EQUIPMENTCOSTACT as eq 
on eq.WORKORDERID = wo.WORKORDERID 
where lab.TASKNAME like 'tree_rmvl' 
group by wo.WORKORDERID 
order by wo.WORKORDERID 
+0

? SQL只是一种查询语言,不是特定数据库产品的名称 –

+2

示例数据。期望的结果。 –

回答

0

,如果你想避免可能出现的重复,你可以从每个表组由键连接的aggreated结果为加入您正在使用哪个数据库管理系统的主表

select wo.workorderid, lab.tot_lab_cost as labcost, mat.tot_mat_cost as matCost, eq.tot_eq_cost) as eqcost 
from WORKORDER as wo 
    inner join ( 
     select WORKORDERID , sum(cost) tot_lab_cost 
     from LABORCOSTACT 
     group by WORKORDERID 
    ) lab on lab.WORKORDERID = wo.WORKORDERID 
    inner join (
     select WORKORDERID , sum(cost) tot_mat_cost 
     from MATERIALCOSTACT 
     group by WORKORDERID 
    ) mat on mat.WORKORDERID = wo.WORKORDERID 
    inner join (
     select WORKORDERID , sum(cost) tot_eq_cost 
     from EQUIPMENTCOSTACT 
     group by WORKORDERID 
    ) eq on eq.WORKORDERID = wo.WORKORDERID 
where lab.TASKNAME like 'tree_rmvl' 
order by wo.WORKORDERID