我在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的值设置为零,这意味着在特定区域中没有故障。

谢谢

最佳答案

只需加上我的两分钱,尽管我喜欢Nz()的简单语法,但是如果您寻求无故障性能,则应避免使用IsNull()和NZ(),而推荐使用Is Null:
IIF(a.faultCount Is Null, 0, a.faultCount)

请参见此处的出色说明:http://allenbrowne.com/QueryPerfIssue.html

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

08-05 05:17