2012-11-29 62 views
5

我有這個疑問在VB應用程序的Access數據庫:號碼錯誤

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’與功能使用的參數錯誤。」

我想實現的是簡單地設置的值歸零,這意味着在特定區域沒有故障。

謝謝

回答

7

爲了增加我的兩分錢,雖然我喜歡Nz()的簡單語法,但如果您尋求無故障的性能,則應避免IsNull()和NZ()以支持Is Null:
IIF(a.faultCount Is Null, 0, a.faultCount)

在這裏看到的優秀解釋:http://allenbrowne.com/QueryPerfIssue.html

另外,如果你的表是在SQL Server或Oracle,使用NZ()將迫使更多的查詢在本地執行,具有巨大的性能影響。

+0

+1我喜歡這個鏈接。就我個人而言,我從來沒有與Nz的麻煩,但它可能是在某些情況下的問題 – HelloW

+0

非常希望我能接受在這裏的所有答案。我檢查了鏈接並可能重寫我的代碼。非常感謝! – johnyTee

+0

這讓我非常沮喪。很有幫助。謝謝。 – StatsViaCsh

5

我認爲你正在尋找的NZ功能

Nz(a.faultCount, 0) 

將返回0,如果該值爲null

+0

是的,我只是搜索這個,這也是一個很好的答案。 Thx – johnyTee

+1

+!哇,不知何故,我要麼從未見過,要麼完全忘記它。我喜歡SQL Server和Access版本的ISNULL是完全不同的。 – LittleBobbyTables