4

我已经尝试了在这种情况下返回值的所有公式,并且不断收到错误消息,告诉我我的参数数量错误。这是我的查询:

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

我究竟做错了什么?

4

2 回答 2

5

Access'ISNULL函数只接受一个参数并返回一个布尔值。

如果要返回0何时[ER Visit]为 Null,可以Nz在从 Access 会话中运行的查询中使用。

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

请注意,我用作ER_Visit别名是因为如果您尝试将字段名称重新用作别名,数据库引擎可能会抱怨“循环”引用。

如果您从 Access 会话外部(例如从经典 ASP 或 .Net)运行查询,则该Nz功能将不可用。你可以这样做...

SELECT IIf([ER Visit] Is Null, 0, [ER Visit]) AS ER_Visit
于 2013-02-06T02:49:59.777 回答
3

您的 SQL 代码中有一些错误:

  • ISNULL不是两个参数函数,它仅评估(变体)值是否为 NULL 并返回Boolean值(TrueFalse)。您正在搜索的功能是NZ

当 Variant 为 Null 时,您可以使用 Nz 函数返回零、零长度字符串 (" ") 或其他指定值。例如,您可以使用此函数将 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 应用程序本身中运行此查询,而是在通过ADOJETDAOODBC或任何其他外部 Access 驱动程序使用 Access 数据库的某些外部应用程序中运行,您还应该注意NZ这些驱动程序不支持. IIF但是,您可以选择您ER Visit的:

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

NZ但是,如果您直接在 Access 中尝试,那么使用该功能应该没有问题。

干杯!

于 2013-02-06T02:53:42.473 回答