У меня есть четыре таблицы клиентов, заказов, элементов заказов и продаж, и я хочу получить общую сумму задолженности для каждого клиента с балансом для каждого клиента. Для этого я пробовал этот запрос SQL:
SELECT c.name AS CustomerName,
c.contactnumber AS CustomerContactNumber,
c.location AS CustomerAddress,
SUM(oi.amount) AS Amount,
SUM(t2.balance) AS Balance
FROM orderitems oi
INNER JOIN orders o ON oi.orderid = o.id
INNER JOIN customers c ON o.customerid = c.id
INNER JOIN
(SELECT s.customerid,
SUM(s.balance) AS Balance
FROM sales s
INNER JOIN customers c ON s.customerid = c.id
GROUP BY s.customerid) t2 ON t2.customerid = c.id
WHERE o.status == 'Processing'
GROUP BY
c.id, c.contactnumber, c.location
Он генерирует следующий вывод:
Он правильно рассчитывает сумму к оплате, но он вычисляет баланс дважды, так как исходный баланс для обоих клиентов равен 100 каждому, но он показывает 200 для каждого.
Также обратите внимание, что в заказе есть столбец состояния, в котором будет указано «Обрабатывается», если сумма заказа должна быть выполнена, и будет «Не завершено», если имеется какой-либо баланс.
Структуры таблицы:
Заказы:
Продажи:
OrderItems:
Клиенты:
Пожалуйста, помогите.