2012-04-16 2 views
4

Я пробовал все формулы для возврата значения в этой ситуации и продолжаю получать сообщение об ошибке, указывающее на то, что у меня неправильное количество аргументов. Вот мой запрос:Возврат значения для нулевых записей в левом внешнем соединении в запросе Access

SELECT [ER Root].[Network Indicator], 
[ER Root].[Prov Indicator], 
[ER Root].[Pos Indicator], 
[ER].[ER Visit] 
FROM [ER Root] LEFT JOIN ER ON ([ER Root].[Network Indicator] = ER.[Network Flag]) AND ([ER Root].[Pos Indicator] = ER.[POS Indicator]) AND ([ER Root].[Prov Indicator] = ER.[Category Indicator]); 

Я попытался:

SELECT [ER Root].[Network Indicator], 
[ER Root].[Prov Indicator], 
[ER Root].[Pos Indicator], 
ISNULL([ER].[ER Visit],0) AS "ER Visit" 
FROM [ER Root] LEFT JOIN ER ON ([ER Root].[Network Indicator] = ER.[Network Flag]) AND ([ER Root].[Pos Indicator] = ER.[POS Indicator]) AND ([ER Root].[Prov Indicator] = ER.[Category Indicator 

Что я делаю неправильно?

ответ

3

Функция доступа ISNULL принимает только один аргумент и возвращает логическое значение.

Если вы хотите вернуть 0, когда [ER Visit] - Null, вы можете использовать Nz в запросе, выполняемом в сеансе доступа.

SELECT Nz([ER Visit], 0) AS ER_Visit 

Обратите внимание, я использовал ER_Visit в качестве псевдонима, поскольку дб двигатель может жаловаться на «круговой» ссылки, если вы пытаетесь повторно использовать имя поля в качестве псевдонима.

Если вы выполняете запрос извне сеанса доступа (например, из классического ASP или .Net), функция Nz будет недоступна. Вы можете сделать это вместо того, чтобы ...

SELECT IIf([ER Visit] Is Null, 0, [ER Visit]) AS ER_Visit 
+0

Вы должны быть быстрым на ничьей здесь. :-) Я отдал +1 за вашу тщательность. Я не думаю, что любой из наших ответов будет принят, потому что OP не вернулся с того дня, когда она разместила вопрос. – HansUp

3

У вас есть несколько ошибок в коде SQL:

  • ISNULL не является функцией двух аргументов, она лишь оценивает, если значение (вариант) является NULL и возвращает значение Boolean (True или False). Функция вы ищете является NZ:

Вы можете использовать функцию Nz для возврата к нулю, строку нулевой длины (« »), или другое заданное значение, когда вариант Null. Например, вы можете использовать эту функцию для преобразования значения Null в другое значение и не допускать его распространения через выражение.

Вторая проблема в вашем запросе:

  • Вы приложив удобочитаемое поданное имя в двойных кавычках ". Это недопустимо, и вы должны заключить его в квадратные скобки [].

Ваш запрос будет таким образом выглядеть следующим образом:

SELECT [ER Root].[Network Indicator], 
[ER Root].[Prov Indicator], 
[ER Root].[Pos Indicator], 
Nz([ER].[ER Visit],0) AS [ER Visit] 
FROM [ER Root] 
LEFT JOIN ER ON ([ER Root].[Network Indicator] = ER.[Network Flag]) AND 
([ER Root].[Pos Indicator] = ER.[POS Indicator]) AND 
([ER Root].[Prov Indicator] = ER.[Category Indicator]); 

В случае, если вы не используете этот запрос непосредственно внутри самого приложения Access, а в какой-то внешнее приложение, которое использует базу данных Access через ADO, JET, DAO, ODBC или любой другой драйвер внешнего доступа вы также должны отметить, что NZ не поддерживается этими драйверами.IIF однако, и вы можете выбрать ваш ER Visit как:

IIF([ER].[ER Visit] Is Null, 0, [ER].[ER Visit]) AS [ER Visit] 

Если же вы пытаетесь непосредственно в Access, то вы не должны иметь проблем с использованием функции NZ.

Cheers!

Смежные вопросы