2012-09-07 52 views
2

我遇到了從單個SQL語句中的多個表中提取Sum的問題。從多個表中獲取總和

我有三個表tblCases,tblTimesheetEntries和tblInvoices tblCases和其他兩個表之間有一對多的關係。

我使用下面的SQL語句,此刻

SELECT c.CaseNo, SUM(i.InvFees), SUM(t.Fees) 
FROM tblCases AS c 
INNER JOIN tblInvoices AS i ON c.CaseNo = i.CaseNo 
INNER JOIN tblTimesheetEntries AS t ON c.CaseNo = t.CaseNo 
GROUP BY c.CaseNo 
ORDER BY c.CaseNo; 

不過,這似乎重複發票金額。例如,如果案例中只有一張發票,但說4個時間表條目,它會計算4 x發票金額作爲該表的總和。

如果我參加了分組並運行下面的SQL來代替:

SELECT c.CaseNo, i.InvFees, t.Fees 
FROM tblCases AS c 
INNER JOIN tblInvoices AS i ON c.CaseNo = i.CaseNo 
INNER JOIN tblTimesheetEntries AS t ON c.CaseNo = t.CaseNo  
ORDER BY c.CaseNo; 

我可以看到這種情況的發生,因爲所有的4線重複發票金額如

Case 1001, Inv 001 950.00, TimeFees 250.00 
Case 1001, Inv 001 950.00, TimeFees 175.00 
Case 1001, Inv 001 950.00, TimeFees 225.00 
Case 1001, Inv 001 950.00, TimeFees 190.00 

所以總的發票是發票的四倍量001

我想從上面的數據恢復是一個單一的總和行:

Case 1001, Total Invoices 950.00, Total TimeFees 840.00 

怎麼辦我在總結中避免了這種重複?

+0

我修改後展現樣的結果我之後。 – PJW

回答

5
SELECT c.CaseNo, 
     i.InvFees, 
     t.Fees 
FROM tblCases AS c 
     INNER JOIN (SELECT CaseNo, 
          Sum(InvFees) AS InvFees 
        FROM tblInvoices 
        GROUP BY CaseNo) AS i 
     ON c.CaseNo = i.CaseNo 
     INNER JOIN (SELECT CaseNo, 
          Sum(Fees) AS Fees 
        FROM tblTimesheetEntries 
        GROUP BY CaseNo) AS t 
     ON c.CaseNo = t.CaseNo 
ORDER BY c.CaseNo; 
+0

+1你不需要外層的'SUM'和'GROUP BY'。 –

+0

超級!謝謝 – PJW

0

嘗試:

SELECT c.CaseNo, i.InvFees, sum(t.Fees) 
FROM tblCases AS c 
INNER JOIN tblInvoices AS i ON c.CaseNo = i.CaseNo 
INNER JOIN tblTimesheetEntries AS t ON c.CaseNo = t.CaseNo  
group by c.CaseNo, i.InvFees