项目行重复,总计费用为SUM

时间:2017-03-06 04:59:10

标签: sql ms-access

执行以下查询时," TotalExpense"列复制到给定SalesID的tblOrderProduct中存在的行数。

SELECT ItemSales.OrderDate,tblExpense.DateOfExpense ,(Nz(SUM(tblOrderProduct.Quantity * tblOrderProduct.ConsumerPrice))) AS TotalSales, (Nz(SUM(tblExpense.Expense))) AS TotalExpense , (Nz(SUM(tblOrderProduct.Quantity * tblOrderProduct.ConsumerPrice)) - Nz(SUM(tblExpense.Expense)))AS Profit
FROM (ItemSales 
LEFT JOIN tblOrderProduct ON ItemSales.SalesID = tblOrderProduct.SalesID)
LEFT JOIN tblExpense ON itemSales.OrderDate = tblExpense.DateOfExpense
GROUP BY ItemSales.OrderDate, tblExpense.DateOfExpense
ORDER BY ItemSales.OrderDate

UNION SELECT ItemSales.OrderDate, tblExpense.DateOfExpense, (Nz(SUM(tblOrderProduct.Quantity * tblOrderProduct.ConsumerPrice))) AS TotalSales, (Nz(SUM(tblExpense.Expense))) AS TotalExpense ,(Nz(SUM(tblOrderProduct.Quantity * tblOrderProduct.ConsumerPrice)) - Nz(SUM(tblExpense.Expense)))AS Profit
FROM (ItemSales
RIGHT JOIN tblExpense ON ItemSales.OrderDate = tblExpense.DateOfExpense)
LEFT JOIN tblOrderProduct ON ItemSales.SalesID = tblOrderProduct.SalesID
GROUP BY ItemSales.OrderDate,tblExpense.DateOfExpense
ORDER BY ItemSales.OrderDate 

编辑: -

请参阅下面的执行查询得到的结果: enter image description here

以红色突出显示的值仅在给定日期的费用为1000,如果与当天相关的销售有22行数据,因此结果显示为22000

造成这种重复的原因是什么?

1 个答案:

答案 0 :(得分:0)



 SELECT ItemSales.OrderDate,tblExpense.DateOfExpense ,(Nz(SUM(tblOrderProduct.Quantity * tblOrderProduct.ConsumerPrice))) AS TotalSales, (Nz(SUM(tblExpense.Expense))) AS TotalExpense , (Nz(SUM(tblOrderProduct.Quantity * tblOrderProduct.ConsumerPrice)) - Nz(SUM(tblExpense.Expense)))AS Profit
FROM (ItemSales 
LEFT JOIN tblOrderProduct ON ItemSales.SalesID = tblOrderProduct.SalesID)

LEFT JOIN
( select DateOfExpense,sum(Expense) AS Expense FROM tblExpense  Group by  DateOfExpense)
 tblExpense ON itemSales.OrderDate = tblExpense.DateOfExpense

GROUP BY ItemSales.OrderDate, tblExpense.DateOfExpense
ORDER BY ItemSales.OrderDate

UNION 

SELECT ItemSales.OrderDate, tblExpense.DateOfExpense, (Nz(SUM(tblOrderProduct.Quantity * tblOrderProduct.ConsumerPrice))) AS TotalSales, (Nz(SUM(tblExpense.Expense))) AS TotalExpense ,(Nz(SUM(tblOrderProduct.Quantity * tblOrderProduct.ConsumerPrice)) - Nz(SUM(tblExpense.Expense)))AS Profit
FROM ItemSales

RIGHT JOIN 
( select DateOfExpense,sum(Expense) AS Expense FROM tblExpense  Group by  DateOfExpense)
 tblExpense ON ItemSales.OrderDate = tblExpense.DateOfExpense

LEFT JOIN tblOrderProduct ON ItemSales.SalesID = tblOrderProduct.SalesID
GROUP BY ItemSales.OrderDate,tblExpense.DateOfExpense
ORDER BY ItemSales.OrderDate