Loop Query в Access - PullRequest
       4

Loop Query в Access

0 голосов
/ 07 октября 2019

У меня есть две таблицы в Acces. В одной отображаются все мои учетные записи, которые называются СЧЕТАМИ (есть дубликаты), а во второй таблице отображаются все транзакции и называются СДЕЛКИ.

СЧЕТА

enter image description here

СДЕЛКИ

enter image description here

Я в основном хочу создать таблицу, отображающую все уникальные учетные записичисла, а затем сумма всех транзакций дебетовых транзакций для каждого счета в одном столбце, а затем сумма всех кредитных транзакций для каждого счета во втором столбце. По отдельности запросы будут выглядеть следующим образом:

ВЫБРАТЬ ДИСТИНКТ (Account_Number) ОТ СЧЕТОВ

, а затем

ВЫБРАТЬ СУММУ (Сумму) из ОПЕРАЦИЙ ГРУППЫ BY Debit_Account INTO DEBIT, а затемВЫБЕРИТЕ СУММУ (Сумму) из ГРУППЫ ТРАНЗАКЦИЙ ПО Credit_Account INTO CREDIT

Таким образом, в конечном итоге у вас будет таблица со следующими заголовками

СЧЕТ ДЕБИТА СЧЕТА

Как мне объединить двазапросы. Я предполагаю, что это будет сделано через FOR LOOP, но не знаю, как его построить в Access.

Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

1 голос
/ 07 октября 2019

Вы, похоже, хотите left join и group by:

select a.account_number, sum(t.amount)
from accounts as a left join
     transactions as t
     on a.account_number = t.account
group by a.account_number;

Если на всех учетных записях есть хотя бы одна транзакция, тогда ваш второй запрос в значительной степени соответствует желаемому:

SELECT Account, SUM(Amount) 
FROM TRANSACTIONS
GROUP BY Account;

По моему мнению, вы всегда должны включать ключи GROUP BY в SELECT запроса агрегации - если только у вас нет веских причин для их исключения.

РЕДАКТИРОВАТЬ:

Для вашего пересмотренного вопроса, как насчет использования коррелированных подзапросов:

select a.*,
       (select sum(t.amount)
        from transaction as t
        where t.debit_account = a.account_number
       ) as debits,
       (select sum(t.amount)
        from transaction as t
        where t.credit_account = a.account_number
       ) as credits
from account as a
0 голосов
/ 07 октября 2019

Этот код отвечает на оригинальный вопрос. Присоединитесь к 2 запросам, подобным этому

SELECT a.Account_Number, a.Account_Name, t.Total
FROM (SELECT DISTINCT Account_Number, Account_Name FROM ACCOUNTS) AS a
INNER JOIN (SELECT Account, SUM(Amount) AS Total from TRANSACTIONS GROUP BY Account) AS t
ON t.Account = a.Account_Number

Если вы не используете 1-й запрос и вместо этого присоединяетесь к таблице ACCOUNTS, то вы получите неправильные результаты, потому что суммы будут умножены на количество дубликатовв таблице ACCOUNTS.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...