Подтвердить что ты не робот

Совместная альтернатива в Access SQL

В T-SQL вы можете сделать это:

SELECT ProductId, COALESCE(Price, 0)
FROM Products

Как вы делаете то же самое в Access SQL? Я вижу примеры для этого с Nz в VBA, но я ищу эквивалент SQL.

Спасибо.

4b9b3361

Ответ 1

Доступ поддерживает функцию Nz и позволяет использовать ее в запросе. Обратите внимание, что Nz совпадает с функцией ISNULL T-SQL. Он не может принимать произвольное количество параметров, например COALESCE.

Ответ 2

Если в запросе Access вы можете попробовать следующее:

"Price = IIf([Price] Is Null,0,[Price])"

Ответ 3

Похоже, я могу просто использовать:

SELECT ProductId, Nz(Price, 0)
FROM Products

Кажется, все работает нормально.

Ответ 4

Использование 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

Ответ 5

Используя IsNull(), Nz(), а функции преобразования данных являются встроенными функциями VBA и будут только замедлять ваши запросы в версиях до 2003 года. Что касается создания данных, то используйте CCur(), чтобы гарантировать тип данных, но только если вам нужно провести сильные сравнения или просто установить для форматирования значение Currency в столбце. Это утверждение IF замедляет работу, поскольку добавляет еще одну функцию к вашей рутине

используя это решение: Nz([Price], CCur(0))

будет выполняться только время CCur(), когда Price Is Null, так что в целом это, вероятно, самый быстрый.

Дело в том, что наименьшее количество используемых функций, тем быстрее будут выполняться ваши запросы.

Ответ 6

Функция COALESCE или NULLIF - это стандарт, используемый на сервере sql для хорошей миграции для доступа. ISNULLOR IIF или CHOOSE являются нестандартной функцией.