从多个表中获取总和

PJW*_*PJW 2 sql t-sql sql-server sum

我在单个SQL语句中从多个表中提取Sums时遇到问题.

我有三个表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;
Run Code Online (Sandbox Code Playgroud)

但是,这似乎与发票金额重复.例如,如果案例中只有一个发票,但说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;
Run Code Online (Sandbox Code Playgroud)

我可以看到这种情况正在发生,因为发票金额在所有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
Run Code Online (Sandbox Code Playgroud)

因此,发票总额是发票001金额的四倍.

我想从上面的数据返回的是一个求和线:

Case 1001,  Total Invoices 950.00,  Total TimeFees 840.00
Run Code Online (Sandbox Code Playgroud)

如何在总结中避免这种重复?

小智 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; 
Run Code Online (Sandbox Code Playgroud)