2016-03-17 3 views
-2

Можно ли запросить что-то вроде этого?SQL SUM Sub Queries

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

текущий запрос SQL у меня есть

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 

это мои выборочные данные по базе данных:

See Here

Я также прикрепить вывод запроса ,но мой желаемый результат что-то вроде этого

ddTask_id dd_id EstimateCost 
31   15  40 
32   16  40 
+0

Не могли бы вы предоставить условие соединения? Я прав, чем вы присоединяете эти таблицы к паре (id, num)? –

+1

** TAG ** база данных пожалуйста. SQL Server, Oracle или некоторые другие. – AKS

+0

На самом деле у меня есть пример кода, здесь вы можете проверить, почему мой запрос суммирует всю стоимость моего стола. Я отредактирую свой пост. – Devs

ответ

0

Глядя на ваши данные выборки (!, Которые не имеют каких-либо dd_id столбец), вы можете сделать это используя объединение, а не полное внешнее соединение. Попробуйте следующий запрос:

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 
+0

Является ли Sum (EstimatedCost) тем же в моем запросе? – Devs

+0

Да, вы можете попробовать запустить его самостоятельно! – AKS

+0

Это работает, но в чем разница? Спасибо брат – Devs

0

Попробуйте использовать этот запрос:

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 
+0

Нет, это не сработает раньше. – Devs