9

MS Access で SQL クエリを作成しました

select NVL(count(re.rule_status),0) from validation_result re, validation_rules ru where re.cycle_nbr="+cycle_nbr+" and re.rule_response=ru.rule_desc and re.rule_status='FAIL' and ru.rule_category='NAMING_CONVENTION' group by re.rule_status"

しかし、出力はNull. に変換したいZero。関数を使用NVLすると、MS Access はそれを受け入れません。NZ関数も試しましたが、同じ出力、つまりゼロではなくNULLが得られます。

4

1 に答える 1

10

Nz()間違いなくあなたが探している機能です。あなたはそれを試したら戻ったと言いますNull、私はそれを信じるのは難しいとNz()思います。参考のため:Null

x = Nz(Null, 0)0 を返します ( VbVarType.vbInteger)

x = Nz(Null, "")空の文字列 ( VbVarType.vbString)を返します

x = Nz(Null)空の変数 (VbVarType.vbEmptyではなく VbVarType.vbNull)を返します

編集

さらに調査すると、特定のケースの問題は、COUNT(re.rule_status)も実行するクエリで a を実行していることGROUP BY re.rule_statusです。クエリのWHERE句が空のセット (行が返されない) になる場合、クエリ全体では、値が 0 または Null の単一の行ではなく、単に行が返されません。

これは、次のテスト コードで確認できます...

Sub NzTest()
Dim rst As DAO.Recordset, strSQL As String
strSQL = "SELECT Nz(COUNT(LastName), 0) FROM Members WHERE False GROUP BY LastName"
Debug.Print strSQL
Set rst = CurrentDb.OpenRecordset(strSQL, dbOpenSnapshot)
If rst.EOF Then
    Debug.Print "No rows were returned."
Else
    Debug.Print "Count = " & rst(0).Value
End If
rst.Close
Set rst = Nothing
End Sub

...結果を生成します

SELECT Nz(COUNT(LastName), 0) FROM Members WHERE False GROUP BY LastName
No rows were returned.

を削除するGROUP BYと...

SELECT Nz(COUNT(LastName), 0) FROM Members WHERE False
Count = 0

...そして実際Nz()には、その場合は必要ありません:

SELECT COUNT(LastName) FROM Members WHERE False
Count = 0
于 2013-05-30T08:10:31.203 に答える