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)