Промежуточный итог в Access Query на основе элемента и даты - PullRequest
0 голосов
/ 16 октября 2018

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

Таблица "DMPartsT" будет выглядеть следующим образом:

ID     RecordDate     PartID     PartTransactions
1      12/04/2018     3          6
22     22/02/2017     9          14
3      18/05/2018     5          7
2      12/11/2017     3         -3
11     25/09/2018     7          12
4      21/06/2018     5         -2
5      14/07/2018     8          43
7      15/01/2018     3          18
6      24/03/2018     10         30
8      25/05/2018     3          -2

Результат, к которому я стремлюсь, - запрос на возврат таблицы, содержащейдобавленное вычисляемое поле, которое будет показывать промежуточный итог определенной части, отсортированный по дате.Например, для PartID = 3 сгенерированный результат должен быть следующим:

ID     RecordDate     PartID     PartTransactions     PartTotal
2      12/11/2017     3         -3                    -3
7      15/01/2018     3          18                    15
1      12/04/2018     3          6                     21
8      25/05/2018     3         -2                     19

Запрос должен просмотреть все доступные данные в таблице.

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

PartTotal: IIf([PartID]=3,DSum("[PartTransactions]","DmPartsT","[RecordDate]<=#" & [RecordDate] & "#"))

и с 'RecordDate', отсортированным в Acsending, и 'PartID', отфильтрованным до 3 в окне запроса, я получаю список всех частейтипа 3 в правильном порядке дат, однако с неправильными значениями Part_Total!

Буду признателен, если кто-нибудь сможет помочь найти правильный подход.Спасибо.

1 Ответ

0 голосов
/ 16 октября 2018

Если вы собираетесь использовать DSum, вам нужно отформатировать вашу строку.Но вы редко когда-либо должны использовать агрегат домена в запросе.Почти во всех случаях вместо этого следует использовать подзапрос.

Кроме того, при суммировании также необходимо указывать идентификатор детали, поэтому включите его в предложение WHERE подзапроса (или агрегата домена).

PartTotal: (SELECT SUM([PartTransactions]) FROM DmPartsT t WHERE t.[RecordDate]<=  DMPartsT.[RecordDate] AND t.PartID = DmPartsT.PartID)

Это позволяет избежать ошибок при приведении к строке и обратно и позволяет оптимизатору анализировать и оптимизировать ваш запрос.

...