Как создать отчет о доступе к финансовому отчету о потоке Ca sh, требующий вычислений по нескольким полям - PullRequest
0 голосов
/ 08 апреля 2020

У меня установлена ​​база данных Access с ежемесячными финансовыми данными, результаты которой представлены в нескольких таблицах: - Балансы счетов: № счета, BegBal, EndBal, Месяц, Год - 1 запись на счет в месяц / год - Номера счетов: Номер счета, Описание , Позиция CF, позиция # - Ca sh Def Def: позиция позиции CF, описание

Отчет о расходе Ca sh аналогичен следующему: позиция позиции CF 1 "Описание" Сумма всех счетов для Позиция CF 1 (EndBal-Beg Bal) Позиция CF 2 «Описание» Сумма всех счетов для позиции CF 2 (EndBal-Beg Bal)…

Ca sh отчет о потоке за данный месяц был довольно прямо. У меня проблемы с созданием, который также включает столбец для результатов с начала года. Для этого требуется, чтобы я использовал записи таблицы «Баланс счета» за 2 разных месяца (достаточно легко добавить к критериям запроса выбора), но не уверен, как: 1 - создать выражение, которое ссылается на EndBal из записи текущего месяца и начальный баланс из Запись за январь месяц 2 - создайте отчет таким образом, чтобы суммирование правильно обрабатывало тот факт, что на счет приходится 2 записи баланса счета (1 для января и 1 для текущего месяца). 3 - Сначала я подумал об использовании Self Join, но возникает еще одна сложность, поскольку учетные записи можно добавлять и останавливать. Таким образом, мы должны учитывать случаи, когда номер счета не в текущем месяце, а в январе, и наоборот. Тогда другой месяц будет иметь значение 0.

РЕДАКТИРОВАТЬ 4/9/2020

ОК, так что я думаю, что в основном решил свою проблему. Мне потребовалось ПОЛНОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ на той же таблице, чтобы получить желаемые результаты - но, конечно, Access не поддерживает это напрямую - нужно было сделать СОЕДИНЕНИЕ ВЛЕВОГО И ВПРАВО НАРУЖНОГО СОЕДИНЕНИЯ.

См. Ниже для SQL

SELECT a.RecDate, a.StoreID, a. [Account #], a. [Начальный баланс], a. [Конечный баланс], b.RecDate, b. StoreID, b. [Account #], b. [Начальный баланс] FROM ((ВЫБЕРИТЕ * ОТ AccountBalances WHERE (AccountBalances.RecDate = [TempVars]! [VarDate] И AccountBalances.StoreID = [TempVars]! [VarStoreID]))) AS СЛЕДУЮЩЕЕ ВНЕШНЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ * ИЗ СЧЕТА AccountBalances, ГДЕ (AccountBalances.RecDate = [TempVars]! [varStartDate] И AccountBalances.StoreID = [TempVars]! [varStoreID])) AS b ON (a. [Account #] = b. [ Account Account]])

UNION

SELECT a.RecDate, a.StoreID, a. [Account #], a. [Начальный баланс], a. [Конечный баланс], b. RecDate, b.StoreID, b. [Account #], b. [Начальный баланс] FROM ((ВЫБЕРИТЕ * ОТ AccountBalances WHERE (AccountBalances.RecDate = [TempVars]! [VarDate] И AccountB alances.StoreID = [TempVars]! [varStoreID])) В КАЧЕСТВЕ ПРАВИЛЬНОГО ВНЕШНЕГО СОЕДИНЕНИЯ (SELECT * FROM AccountBalances WHERE (AccountBalances.RecDate = [TempVars]! [varStartDate] И AccountBalances.StoreID = [TempVars]! [varStoreID])) AS b ON (a. [Account #] = b. [Account #])); Mike

1 Ответ

0 голосов
/ 09 апреля 2020

Требуется использовать FULL OUTER JOIN, но, конечно, Access не поддерживает напрямую, так как использовал UNION LEFT и RIGHT OUTER JOINs - см. Ниже.

SELECT a.RecDate, a.StoreID, a. [Счет №], а. [Начальный баланс], а. [Конечный баланс], b.RecDate, b.StoreID, б. [Счет №], б. [Начальный баланс]

ОТ (

(SELECT * FROM AccountBalances WHERE (AccountBalances.RecDate = [TempVars]! [VarDate] AND AccountBalances.StoreID = [TempVars]! [VarStoreID])) КАК

ВЛЕВОЕ СОЕДИНЕНИЕ

(SELECT * FROM AccountBalances WHERE (AccountBalances.RecDate = [TempVars]! [VarStartDate] AND AccountBalances.StoreID = [TempVars]! [VarStoreID])) AS b

ON (a. [Account # ] = b. [Account #])

)

UNION

SELECT a.RecDate, a.StoreID, a. [Account #], a. [Начальный баланс ], a. [Конечный баланс], b.RecDate, b.StoreID, b. [Account Number], b. [Начальный баланс]

ОТ (

(ВЫБРАТЬ * ОТ СЧЕТА ГДЕ ГДЕ) (AccountBalances.RecDate = [TempVars]! [Varda te] AND AccountBalances.StoreID = [TempVars]! [varStoreID])) КАК

ПРЯМОЕ НАРУЖНОЕ СОЕДИНЕНИЕ

(ВЫБРАТЬ * ИЗ СЧЕТА БАЛАНСОВ ГДЕ (AccountBalances.RecDate = [TempVars]! [varStartDate]! ] AND AccountBalances.StoreID = [TempVars]! [VarStoreID])) AS b

ON (a. [Account #] = b. [Account #])

);

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