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

Jan*_*anT 5 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 
Run Code Online (Sandbox Code Playgroud)

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

"查询表达式中的函数使用的参数数量错误'ISNULL(a.faultCount,0'."

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

谢谢

Pat*_*rez 7

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

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

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


Lit*_*les 5

Microsoft Access的版本与IsNull大多数SQL版本不同; 如果值为NULL,它只返回TRUE,如果不是则返回FALSE.

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

IIF(ISNULL(a.faultCount), 0, a.faultCount)
Run Code Online (Sandbox Code Playgroud)


Hel*_*loW 5

我认为你正在寻找nz功能

Nz(a.faultCount, 0)
Run Code Online (Sandbox Code Playgroud)

如果值为null,则返回0