如何使查询仅作用于一个元素

时间:2019-06-18 16:23:45

标签: sql ms-access-2010

我想编写一个查询,该查询接受一个表中的一条记录,并仅从第二个表中的一条记录中减去一个值。参见下面的图片。

客户A订购了产品1的2个,产品2的1个,产品2的1个(稍后日期),产品3的5个和产品4的1个。

他退回了产品1中的1个,产品1中的1个,产品2中的1个,产品3中的2个和产品3中的1个。

差异在下一栏中给出。

enter image description here

我的sql是:

SELECT Orders.Client, Orders.[Product #], [Ordered]-[Returned] AS Delta
FROM Orders INNER JOIN Returns ON (Orders.[Product #] = Returns.[Product 
#]) AND (Orders.Client = Returns.Client);

但这给了我以下信息,这是不正确的,因为乘积2作用了四次,乘积3作用了两次,分别是(5-2)和然后又是(5-1)。

Client  Product #   Delta
 A           1        1
 A           2        0
 A           2        0
 A           2        0
 A           2        0
 A           3        3
 A           3        4

1 个答案:

答案 0 :(得分:2)

问题在于您没有与之匹配的每个订单的ID。尝试分别在每个表上使用Sum和Group by,然后将它们加入分组的列中

SELECT o.Client, o.[Product #], sum_ordered - sum_returned
FROM (SELECT Client, [Product #], SUM([Ordered]) AS sum_ordered
      FROM Orders 
      GROUP BY Client, [Product #]) o
JOIN (SELECT Client, [Product #], SUM(returned) AS sum_returned 
      FROM Returns 
      GROUP BY Client, [Product #]) r ON o.Client = r.Client AND o.[Product #] = r.[Product #]