#sql #ms-access #ms-access-2016
#sql #ms-access #ms-access-2016
Вопрос:
Я пытаюсь получить итоговые значения из таблиц «продажи» и «оплата», где customer_id в обеих таблицах соответствует клиенту, выбранному из поля со списком в форме.
Таблица 1: Продажи
customer_id item item_value
1 Fan $200
3 AC $500
1 Iron $50
Таблица 2: Оплата
customer_id amount
1 $150
2 $300
1 $50
4 $100
Я не уверен, как написать запрос, чтобы получить следующий результат:
Результат запроса
customer_id total_purchase_amount total_paid_amount
1 250 $200
Мы ценим вашу помощь!
Заранее спасибо
Ответ №1:
Вы можете объединить две суммированные таблицы, например:
select a.customer_id, a.total_purchase_amount, b.total_paid_amount
from
(
select s.customer_id, sum(s.item_value) as total_purchase_amount
from sales s
group by s.customer_id
) a left join
(
select p.customer_id, sum(p.amount) as total_paid_amount
from payment p
group by p.customer_id
) b on a.customer_id = b.customer_id
Для фильтрации по клиенту, выбранному в вашем поле со списком, вы могли бы включить where
предложение, такое как:
where a.customer_id = Forms!YourForm!YourComboBox
Вы также можете использовать Nz(b.total_paid_amount, 0)
для отображения нуля для тех клиентов, у которых нет Payment
записей.
Ответ №2:
Вы можете использовать коррелированный подзапрос :
select s.customer_id, sum(s.item_value) as total_purchase_amount,
(select sum(p.amount)
from Payment p
where p.customer_id = s.customer_id
) as total_paid_amount
from Sales s
where s.customer_id = ? -- you can pass here customer_id
group by s.customer_id;
Комментарии:
1. Идеальный ответ… Большое спасибо!