как заменить пустое значение на ноль в MS-Acess - PullRequest
1 голос
/ 13 июня 2011

У меня ниже запрос в Ms-Access, но я хочу заменить пустое значение на ноль, но я не могу получить правильный ответ. Есть ли способ заменить пустое значение на ноль.

(SELECT 
   SUM(IIF(Review.TotalPrincipalPayments,0,Review.TotalPrincipalPayments))+
   SUM(IIF(Review.TotalInterestPayments,0,Review.TotalInterestPayments ))
 FROM 
   tblReviewScalars as Review 
 INNER JOIN tblReportVectors AS Report ON(Review.LoanID=Report.LoanID) 
 WHERE Report.AP_Indicator="A" AND Report.CashFlowDate=#6/5/2011# AND Review.AsofDate=#6/5/2011# AND ( Review.CreditRating =ReviewMain.CreditRating)) AS [Cash Collected During the Period],

Ответы [ 3 ]

1 голос
/ 13 июня 2011

Полагаю, TotalPrincipalPayments и TotalInterestPayments являются числовыми типами, поэтому рассматриваемые «пробелы» - это значение NULL.

В SQL функция set SUM будет игнорировать значения NULL, если только все значения не преобразуются в NULL, и в этом случае возвращается NULL (ошибочно, и ошибка в том, что SQL не Access для изменения :)

Чтобы использовать простой пример, SELECT SUM(a) FROM T; вернет NULL, только если a IS NULL ИСТИНА для всех строк T или когда T пусто. Следовательно, вы можете переместить логику «заменить NULL на ноль» за пределы функции SUM(). Отметив, что «NULL s распространяется» в вычислениях, вам нужно будет обрабатывать NULL для каждого SUM().

Вы не опубликовали весь свой запрос, например, источник корреляционного имени («псевдоним таблицы») ReviewMain не показывается. Но кажется очевидным, что вы создаете производную таблицу с именем "Cash Collected During the Period", и в этом случае вашему вычисляемому столбцу требуется предложение AS ('псевдоним столбца'), например TotalPayments, например.

...
(
 SELECT IIF(SUM(Review.TotalPrincipalPayments) IS NULL, 0, SUM(Review.TotalPrincipalPayments))
        +  IIF(SUM(Review.TotalInterestPayments) IS NULL, 0, SUM(Review.TotalInterestPayments))
           AS TotalPayments
   FROM tblReviewScalars as Review 
        INNER JOIN tblReportVectors AS Report 
           ON Review.LoanID = Report.LoanID 
  WHERE Report.AP_Indicator = 'A' 
        AND Report.CashFlowDate = #2011-05-06# 
        AND Review.AsofDate = #2011-05-06# 
        AND Review.CreditRating = ReviewMain.CreditRating
) AS [Cash Collected During the Period], ...
0 голосов
/ 21 января 2012

Чтобы изменить нулевое значение на ноль в базе данных Access 2010, откройте свою таблицу, перейдите в представление конструктора, щелкните поле и установите значение по умолчанию: =0.

0 голосов
/ 14 июня 2011

Альтернативой ответу @ onedaywhen является использование функции nz, специально предназначенной для нулевой замены:

SELECT 
   SUM(NZ(Review.TotalPrincipalPayments,0))+
   SUM(NZ(Review.TotalInterestPayments,0))
...

Как уже отмечалось, это функционально эквивалентно размещению функции вне агрегата, которая может работать лучше (функция вызывается один раз, а не один раз для неагрегированной строки):

SELECT 
   NZ(SUM(Review.TotalPrincipalPayments),0)+
   NZ(SUM(Review.TotalInterestPayments),0)
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...