объединить альтернативу в Access SQL - PullRequest
29 голосов
/ 29 октября 2008

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

SELECT ProductId, COALESCE(Price, 0)
FROM Products

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

Спасибо.

Ответы [ 6 ]

21 голосов
/ 29 октября 2008

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

17 голосов
/ 29 октября 2008

Если это запрос Access, вы можете попробовать это:

"Price = IIf([Price] Is Null,0,[Price])"
8 голосов
/ 29 октября 2008

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

SELECT ProductId, Nz(Price, 0)
FROM Products

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

5 голосов
/ 09 ноября 2016

Использование Iif(Price is null, 0, Price) должно дать вам наилучшую производительность (см. Советы по производительности Аллена Брауна ). Однако 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
1 голос
/ 29 апреля 2014

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

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

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

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

0 голосов
/ 31 декабря 2014

Функции COALESCE или NULLIF являются стандартом, используемым на сервере sql для хорошей миграции для доступа. ISNULL или IIF или ВЫБРАТЬ являются нестандартной функцией.

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