Access DB上SQL ISNULL()的参数数量错误

时间:2012-11-29 20:17:01

标签: sql vb.net ms-access

我在Access DB上的VB应用程序中有这个查询:

  SELECT DISTINCT Specialization, MAX(a.faultZone) AS faultZone, ISNULL(a.faultCount, 0) AS NoOfFaults  FROM Technicians AS t 
    LEFT JOIN 
             ( 
            SELECT DISTINCT Faults.[Type] AS faultType, MAX(Faults.[Zone]) AS faultZone, COUNT(Faults.[Type]) AS faultCount 
            FROM Faults "
            WHERE Faults.[Zone] = 8 " ' this value will be from variable
            GROUP BY Faults.[Type] "
            ) AS a 
    ON (t.Specialization = a.faultType) 
    WHERE t.specialization <> 'None' "
    GROUP BY a.faultCount, t.Specialization 

它给出了我无法解决的以下问题......

  

“查询表达式中与函数一起使用的参数数量错误   'ISNULL(a.faultCount,0'。“

我想要实现的只是将NoOFFaults的值设置为零,这意味着特定区域没有错误。

谢谢

3 个答案:

答案 0 :(得分:7)

只是为了增加我的两分钱,虽然我喜欢Nz()的简单语法,但如果你寻求无故障性能,应该避免使用IsNull()和NZ()来支持Is Null:
  IIF(a.faultCount Is Null, 0, a.faultCount)

请参阅此处的优秀解释:http://allenbrowne.com/QueryPerfIssue.html

此外,如果您的表位于SQL Server或Oracle中,使用Nz()将强制更多的查询在本地执行,并对性能产生巨大影响。

答案 1 :(得分:5)

Microsoft Access'版本的IsNull与大多数SQL版本不同;它只是returns TRUE if the value is NULL, and FALSE if it isn't

你需要基本上使用IIF()构建自己的代码:

IIF(ISNULL(a.faultCount), 0, a.faultCount)

答案 2 :(得分:5)

我认为你正在寻找nz功能

Nz(a.faultCount, 0)
如果值为null,

将返回0