5

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をゼロに設定することです。これは、特定のゾーンに障害がないことを意味します。

ありがとうございました

4

3 に答える 3

7

2 セントを追加するだけです。私は Nz() の単純な構文が好きですが、問題のないパフォーマンスを求める場合は、 IsNull() と NZ() の両方を避けて Is Null: を使用する必要があります
IIF(a.faultCount Is Null, 0, a.faultCount)

ここで優れた説明を参照してください: http://allenbrowne.com/QueryPerfIssue.html

また、テーブルが SQL Server または Oracle にある場合、Nz() を使用すると、より多くのクエリがローカルで実行され、パフォーマンスに大きな影響を与えます。

于 2012-11-29T20:43:04.333 に答える
5

MicrosoftAccessのバージョンはIsNullほとんどのSQLバージョンとは異なります。値がNULLの場合はTRUEを返し、そうでない場合はFALSEを返します。

基本的に、以下を使用して独自に構築する必要がありますIIF()

IIF(ISNULL(a.faultCount), 0, a.faultCount)
于 2012-11-29T20:20:49.073 に答える
5

nz関数を探していると思います

Nz(a.faultCount, 0)

値が null の場合は 0 を返します

于 2012-11-29T20:27:04.667 に答える