2

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

合計でこの重複を回避するにはどうすればよいですか?

4

2 に答える 2

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; 
于 2012-09-07T17:40:53.453 に答える
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
于 2012-09-07T17:41:56.620 に答える