簡體   English   中英

SQL SUM 子查詢

[英]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

編輯

我有當前的 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

這是我在數據庫上的示例數據:

看這里

我還附上了查詢輸出,但我想要的輸出是這樣的

ddTask_id    dd_id    EstimateCost
31           15       40
32           16       40

嘗試使用此查詢:

 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

查看您的示例數據(它沒有任何 dd_id 列!),您可以通過使用 union all 語句而不是完全外連接來做到這一點。 試試下面的查詢:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM