MS Access, получение суммарных значений из двух таблиц

#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. Идеальный ответ… Большое спасибо!