車、経費、収入の 3 つのテーブルをクエリしています。
SELECT c.CarMake, c.CarType,
(SUM(i.IncomeKMEnd -i.IncomeKMStart)) AS TotalKms,
MAX(i.IncomeKMEnd) as EndingKMs,
CONVERT(varchar(10), CONVERT(int,100.0*(SUM(i.IncomePrice) - SUM(e.ExpenseAmount))/c.CarBuyPrice)) +'%' as IncomePercentage,
SUM(CASE WHEN e.PaymentType LIKE '%extra%' THEN e.ExpenseAmount ELSE 0 END) AS ExpenseSum
FROM (Cars AS c
INNER JOIN Incomes as i ON c.CarID = i.CarID AND (i.IncomeDateFrom BETWEEN '20130101' AND '20140101'))
INNER JOIN Expenses as e ON i.CarID = e.CarID AND (e.ExpenseDateFrom BETWEEN '20130101' AND '20140101')
GROUP BY c.CarType, c.CarMake, c.CarBuyPrice
Cars テーブルに 1 台の車があり、Incomments テーブルで 3 回、Expenses テーブルで 2 回参照されます。グループ化されていない場合、このクエリは 6 行を返し、費用と収入を 6 回合計します。収入と支出を正しく合計する方法はありますか?