В T-SQL вы можете сделать это:
SELECT ProductId, COALESCE(Price, 0)
FROM Products
Как вы делаете то же самое в Access SQL? Я вижу примеры для этого с Nz в VBA, но я ищу эквивалент SQL.
Спасибо.
В T-SQL вы можете сделать это:
SELECT ProductId, COALESCE(Price, 0)
FROM Products
Как вы делаете то же самое в Access SQL? Я вижу примеры для этого с Nz в VBA, но я ищу эквивалент SQL.
Спасибо.
Доступ поддерживает функцию Nz и позволяет использовать ее в запросе. Обратите внимание, что Nz совпадает с функцией ISNULL T-SQL. Он не может принимать произвольное количество параметров, например COALESCE.
Если в запросе Access вы можете попробовать следующее:
"Price = IIf([Price] Is Null,0,[Price])"
Похоже, я могу просто использовать:
SELECT ProductId, Nz(Price, 0)
FROM Products
Кажется, все работает нормально.
Использование Iif(Price is null, 0, Price)
должно дать вам лучшую производительность (см. рекомендации по производительности Allen Browne). Однако SQL Server Coalesce()
имеет большое преимущество перед Iif()
и Nz()
, что он может обрабатывать несколько параметров в каскаде. Поэтому я создал этот быстрый эквивалент VBA:
Function Coalesce(ParamArray varValues()) As Variant
'returns the first non null value, similar to SQL Server Coalesce() function
'Patrick Honorez --- www.idevlop.com
Dim i As Integer
Coalesce = Null
For i = LBound(varValues) To UBound(varValues)
If Not IsNull(varValues(i)) Then
Coalesce = varValues(i)
Exit Function
End If
Next
End Function
Используя IsNull()
, Nz()
, а функции преобразования данных являются встроенными функциями VBA и будут только замедлять ваши запросы в версиях до 2003 года. Что касается создания данных, то используйте CCur()
, чтобы гарантировать тип данных, но только если вам нужно провести сильные сравнения или просто установить для форматирования значение Currency в столбце. Это утверждение IF замедляет работу, поскольку добавляет еще одну функцию к вашей рутине
используя это решение: Nz([Price], CCur(0))
будет выполняться только время CCur()
, когда Price Is Null, так что в целом это, вероятно, самый быстрый.
Дело в том, что наименьшее количество используемых функций, тем быстрее будут выполняться ваши запросы.
Функция COALESCE или NULLIF - это стандарт, используемый на сервере sql для хорошей миграции для доступа. ISNULLOR IIF или CHOOSE являются нестандартной функцией.