Is there anyway to query something like this?
SELECT
SUM(
SELECT Tbl1.Cost FROM Tbl1 WHERE Tbl1.Type = 0 +
SELECT Tbl2.Cost FROM Tbl2 WHERE Tbl2.Type = 0 +
SELECT Tbl3.Cost FROM Tbl3 WHERE Tbl3.Type = 0
) AS EstimatedCost
FROM Tbl1 <JOIN> Tbl2 <JOIN> Tbl3
GROUP BY Tbl1.id,Tbl2.id,Tbl3.id,Tbl1.num,Tbl2.num,Tbl3.num
EDIT
current sql query i have
SELECT
COALESCE (vJoboutsEst.ddTask_id, vMaterialsEst.ddTask_id, vLaborsEst.ddTask_id) AS ddTask_id,
COALESCE (vJoboutsEst.dd_id, vMaterialsEst.dd_id, vLaborsEst.dd_id) AS dd_id,
SUM(
CASE WHEN vJoboutsEst.jo_cost IS NULL THEN 0 ELSE vJoboutsEst.jo_cost END
+
CASE WHEN vMaterialsEst.item_amt IS NULL THEN 0 ELSE vMaterialsEst.item_amt END
+
CASE WHEN vLaborsEst.labor_amt IS NULL THEN 0 ELSE vLaborsEst.labor_amt END
) AS EstimateCost
FROM
vDryDock,
(
SELECT vJoboutsEst.ddTask_id, vJoboutsEst.dd_id,SUM(vJoboutsEst.jo_cost) as jo_cost
FROM vJoboutsEst WHERE vJoboutsEst.jo_type = 0 GROUP BY vJoboutsEst.ddTask_id, vJoboutsEst.dd_id
) vJoboutsEst
FULL OUTER JOIN (
SELECT vMaterialsEst.ddTask_id, vMaterialsEst.dd_id,SUM(vMaterialsEst.item_amt) as item_amt
FROM vMaterialsEst WHERE vMaterialsEst.material_type = 0 GROUP BY vMaterialsEst.ddTask_id, vMaterialsEst.dd_id
) vMaterialsEst ON vJoboutsEst.ddTask_id = vMaterialsEst.ddTask_id
FULL OUTER JOIN (
SELECT vLaborsEst.ddTask_id, vLaborsEst.dd_id,SUM(vLaborsEst.labor_amt) as labor_amt
FROM vLaborsEst WHERE vLaborsEst.labor_type = 0 GROUP BY vLaborsEst.ddTask_id, vLaborsEst.dd_id
) vLaborsEst ON ISNULL(vJoboutsEst.ddTask_id, vMaterialsEst.ddTask_id) = vLaborsEst.ddTask_id
GROUP BY
vJoboutsEst.ddTask_id, vMaterialsEst.ddTask_id, vLaborsEst.ddTask_id,
vJoboutsEst.dd_id, vMaterialsEst.dd_id, vLaborsEst.dd_id
this is my sample data on database:
I have also attach the query output, but the my desired output is something like this
ddTask_id dd_id EstimateCost
31 15 40
32 16 40
Try using this query :
SELECT
SUM(
(SELECT sum(Tbl1.Cost) FROM Tbl1 WHERE Tbl1.Type = 0) +
(SELECT sum(Tbl2.Cost) FROM Tbl2 WHERE Tbl2.Type = 0) +
(SELECT sum(Tbl3.Cost) FROM Tbl3 WHERE Tbl3.Type = 0)
) AS EstimatedCost
FROM Tbl1 <JOIN> Tbl2 <JOIN> Tbl3
GROUP BY Tbl1.id,Tbl2.id,Tbl3.id,Tbl1.num,Tbl2.num,Tbl3.num
Looking at your sample data (which didn't have any dd_id column!), you can do this by using a union all statement rather than full outer join. Try the below query:
SELECT
ddTask_id,
dd_id,
SUM(EstimatedCost) AS EstimateCost
FROM
(
SELECT vJoboutsEst.ddTask_id, vJoboutsEst.dd_id,SUM(vJoboutsEst.jo_cost) as EstimatedCost
FROM vJoboutsEst WHERE vJoboutsEst.jo_type = 0 GROUP BY vJoboutsEst.ddTask_id, vJoboutsEst.dd_id
UNION ALL
SELECT vMaterialsEst.ddTask_id, vMaterialsEst.dd_id,SUM(vMaterialsEst.item_amt) as EstimatedCost
FROM vMaterialsEst WHERE vMaterialsEst.material_type = 0 GROUP BY vMaterialsEst.ddTask_id, vMaterialsEst.dd_id
UNION ALL
SELECT vLaborsEst.ddTask_id, vLaborsEst.dd_id,SUM(vLaborsEst.labor_amt) as EstimatedCost
FROM vLaborsEst WHERE vLaborsEst.labor_type = 0 GROUP BY vLaborsEst.ddTask_id, vLaborsEst.dd_id
)aa
GROUP BY
ddTask_id, dd_id
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.