1つのSQLステートメントで複数のテーブルから合計を抽出する際に問題が発生します。
3つのテーブルtblCases、tblTimesheetEntries、およびtblInvoicesがあります。tblCasesと他の2つのテーブルのそれぞれの間には1対多の関係があります。
現在、次の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;
ただし、これは請求額と重複しているようです。たとえば、ケースに請求書が1つしかないが、タイムシートエントリが4つある場合、そのテーブルの合計として請求額の4倍が計算されます。
グループ化を削除して、代わりに次の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の金額の4倍になります。
上記のデータから返したいのは、単一の合計行です。
Case 1001, Total Invoices 950.00, Total TimeFees 840.00
合計でこの重複を回避するにはどうすればよいですか?