Запрос доступа - в Query Design GUI как мне установить сумму, возвращающую ноль, если ноль? - PullRequest
0 голосов
/ 30 апреля 2020

У меня есть запрос, который на основе двух входных данных вычисляет некоторые суммы, а затем принимает разницу этих сумм. Сумма PayAmountParts может быть нулевой, если никакие части не были предоставлены. Это портит мой остаток задолженности и, следовательно, запрос ничего не возвращает. Я видел код VBA или SQL, который делал это, но ничего не делал в Design View GUI. Где в запросе на конструкцию Access Query можно установить, чтобы он возвращал 0 при нулевом значении?

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

Вот код для суммирования количества отправленных отправлений:

SELECT CustomerT.CustomerProgram, PartsT.PartID, PartsT.PartName, Sum(NZ(DiversionT.RcvdQTY,0)) AS SumOfRcvdQTY
FROM PartsT 
   INNER JOIN (CustomerT 
     INNER JOIN DiversionT ON 
        CustomerT.CustomerID = DiversionT.CustomerID) ON 
        PartsT.PartID = DiversionT.PartID
GROUP BY CustomerT.CustomerProgram, PartsT.PartID, PartsT.PartName
HAVING (((CustomerT.CustomerProgram)=[Forms]![PartsSearchF]![CustomerSearch]) 
      AND ((PartsT.PartID)=[Forms]![PartsSearchF]![PartSearch]));

Этот запрос вычисляет возвращаемое количество:

SELECT CustomerT.CustomerProgram, PartsT.PartID, PartsT.PartName, Sum(NZ(PaybackT.PayAmountParts,0)) AS SumOfPayAmountParts
FROM PartsT 
    INNER JOIN (CustomerT INNER JOIN PaybackT ON CustomerT.CustomerID = PaybackT.CustomerID) 
      ON PartsT.PartID = PaybackT.PartID
GROUP BY CustomerT.CustomerProgram, PartsT.PartID, PartsT.PartName
HAVING (((CustomerT.CustomerProgram)=[Forms]![PartsSearchF]![CustomerSearch])
     AND ((PartsT.PartID)=[Forms]![PartsSearchF]![PartSearch]));

Предполагается, что этот запрос рассчитать разницу.

SELECT SinglePartPaybackSumQ.CustomerProgram, PartsT.IndiaUID, PartsT.NSN, PartsT.PartName, SinglePartSumQ.SumOfRcvdQTY, SinglePartPaybackSumQ.SumOfPayAmountParts, [SumOfRcvdQTY]-[SumOfPayAmountParts] AS BalanceOwed
FROM (PartsT 
    INNER JOIN SinglePartPaybackSumQ ON PartsT.PartID = SinglePartPaybackSumQ.PartID) 
    INNER JOIN SinglePartSumQ ON PartsT.PartID = SinglePartSumQ.PartID;

1 Ответ

1 голос
/ 30 апреля 2020

Использование псевдонима и оператора if в построителе запросов:

field alias: Iif(isnull([fieldname]), 0, [fieldname])

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