我想编写一个查询,该查询接受一个表中的一条记录,并仅从第二个表中的一条记录中减去一个值。参见下面的图片。
客户A订购了产品1的2个,产品2的1个,产品2的1个(稍后日期),产品3的5个和产品4的1个。
他退回了产品1中的1个,产品1中的1个,产品2中的1个,产品3中的2个和产品3中的1个。
差异在下一栏中给出。
我的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
答案 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 #]