Используя Jet / ACE, ваш запрос может быть переписан как:
SELECT IIf(Sum(amount) Is Null, 0, Sum(amount)) AS TotalAmount
FROM Payments
Это должно работать даже из C #, потому что Is Null
и IIf
оба встроены в Jet / ACE.Обратите внимание на пробел в Is Null
и отсутствие скобок (это оператор , а не функция ).
Есть два дополнительных бонуса к использованию IIf
и Is Null
в отличие от Nz
, даже если вам доступен Nz
:
- он выполняется быстрее, потому что вся обработка выполняется в ядре базы данных (поэтому он недолжны выполнять вызовы функций из библиотеки Access)
- она сохраняет исходный тип поля;Поскольку
Nz
возвращает вариант, Jet / ACE вынужден отображать результат в виде строки (что обычно не соответствует желаемому при работе с датами, цифрами и т. д.)
UPDATE: у Аллена Брауна есть превосходный праймер при использовании IIf
, Nz
, IsNull()
и Is Null
.Я планировал опубликовать эту ссылку в качестве своего первоначального ответа, но не смог найти страницу в то время.Я сделал все, что мог, из памяти, но настоящая заслуга принадлежит мистеру Брауну.