2017-07-31 123 views
0

這裏我試圖獲取如下數據(EXPECTED)SQL Server存儲過程中的SUM()

ID | Project | SC | PO | INV 
---+---------+------+------+----- 
1 | test1 | NULL | 1 | NULL 
2 | test2 | NULL | NULL | NULL 

但按我的存儲過程,我得到的輸出作爲

ID | Project | SC | PO | INV 
---+---------+------+----+----- 
1 | test1 | NULL | 1 | NULL 
2 | test2 | NULL | 1 | NULL 

也許結果從我的內心查詢顯示PO收到的Project test1PO test2了。哪些不應該發生。因爲項目'test1'出現在BudgetDetailsDetails表中。

任何幫助球員糾正我寫的總和()查詢?

SELECT 
    BD.ID, BD.Project, 
    (SELECT SUM(Amount) AS SC 
    FROM Details (NOLOCK) a 
    INNER JOIN BudgetDetails (NOLOCK) b ON a.Project = b.Project 
    WHERE ProcurementStatus = 'SC' AND a.Project = b.Project) AS SC, 
    (SELECT SUM(Amount) as PO 
    FROM Details (NOLOCK) a 
    INNER JOIN BudgetDetails(NOLOCK) b ON a.Project = b.Project 
    WHERE ProcurementStatus = 'PO' AND a.Project = b.Project) AS PO, 
    (SELECT SUM(Amount) as INV 
    FROM Details (NOLOCK) a 
    INNER JOIN BudgetDetails(NOLOCK) b ON a.Project = b.Project 
    WHERE ProcurementStatus = 'INV' AND a.Project = b.Project) AS INV 
FROM 
    BudgetDetails (NOLOCK) BD 
WHERE 
    BD.Quarter = @Quarter AND BD.Year = @Year 
GROUP BY 
    BD.ID, BD.Project 
+0

你也可以提供數據嗎? – Xedni

+0

@Xedni輸入數據將季度和年份(2016年) – beginner

+0

我的意思是「BudgetDetails」和「Details」表中的數據看起來像什麼。你的查詢有一些奇怪的地方,但不知道你的數據和源表是什麼樣的,這只是猜測。 – Xedni

回答

0

解決您查詢,您將需要在你的子查詢AND a.Project = BD.Project

你最好使用CASE語句或PIVOT重新寫

SELECT 
    BD.ID, BD.Project, 
    SUM(CASE WHEN ProcurementStatus = 'SC' THEN Amount END) as SC, 
    SUM(CASE WHEN ProcurementStatus = 'PO' THEN Amount END) as PO, 
    SUM(CASE WHEN ProcurementStatus = 'INV' THEN Amount END) as INV, 

FROM 
     BudgetDetails (NOLOCK) BD 
LEFT JOIN 
     Details (NOLOCK) D ON BD.Project = D.Project 
WHERE 
     BD.Quarter = @Quarter 
AND BD.Year = @Year 
GROUP BY 
     BD.ID, 
     BD.Project 

編輯1:從變化INNER JOIN到LEFT JOIN反映@初學者的要求

+0

我無法在我的主查詢中使用Details表。因爲這可以防止來自BudgetDetails表的NULL SC,PO,INV值被顯示 – beginner

+2

@beginner:我想你可以使用'left join'來顯示BudgetDetails表中的所有行 – TriV

+0

在使用Left連接後按預期工作 – beginner