Как заставить запрос действовать только на один элемент - PullRequest
0 голосов
/ 18 июня 2019

Я хочу написать запрос, который берет одну запись в таблице и вычитает значение только из одной записи во второй таблице. Смотри картинку ниже.

Клиент A заказал 2 товара 1, 1 товара 2, 1 товара 2 (позднее), 5 товара 3 и 1 товара 4.

Он вернул 1 товара 1, 1 товара, 1 товара 2, 2 товара 3 и 1 товара 3.

Разница указана в следующем столбце.

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 Ответ

2 голосов
/ 18 июня 2019

Проблема в том, что у вас нет идентификатора для каждого ордера, с которым вы хотите соответствовать.Попробуйте использовать 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 #]
...