0

車、経費、収入の 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 回合計します。収入と支出を正しく合計する方法はありますか?

4

2 に答える 2

1

これを行う 1 つの方法は、他のテーブルを結合せずに、サブクエリで情報を引き出すことです。例えば:

SELECT c.CarMake, c.CarType,
 (SELECT SUM(IncomePrice) FROM Incomes WHERE CarID = c.CarID and (IncomeDateFrom BETWEEN '20130101' AND '20140101')) SumPrice
FROM Cars AS c
于 2013-09-16T20:21:28.747 に答える