次の値をテーブルに挿入すると
Insert into Table1 (Field1, Field2, Field3, Field4, DateField) values (1, 1, 100, 5, "5/10/2012")
Insert into Table1 (Field1, Field2, Field3, Field4, DateField) values (1, 2, 100, 99, "5/10/2012")
Insert into Table1 (Field1, Field2, Field3, Field4, DateField) values (1, 3, 100, 3, "5/10/2012")
私のクエリが試行して取得しようとしているのは、特定の日付までに Field2 の最大値を持つ Field4 の値です。
例
select isnull(Field4,0) from Table1
where Field1 = 1 and Field3 = 100 and datediff(day,DateField,"5/21/2012") > 0
having Max(Field2) = Field2
これはうまくいきます。期待どおりの 3 を取得します。これが私の質問の出所です。Field3 が 110 などの他の値を持つ可能性があります。そのクエリを実行すると、
select isnull(Field4,0) from Table1
where Field1 = 1 and Field3 = 110 and datediff(day,DateField,"5/21/2012") > 0
having Max(Field2) = Field2
結果が出ません。null である必要があり、isnull(Field4,0) は 0 を吐き出す必要があります。しかし、そうではありません。選択を count(*) に置き換えて、0 が返されるかどうかを確認しようとしましたが、何も返されません。私は途方に暮れています。これは一時テーブルに入り、別のテーブルの値と合計されるため、0 を返す必要があります。ありがとう。
編集 - 新しい質問の部分 ここで間違ったことに isnull を使用していた可能性があることを理解しています。私が受け入れることができるもの。ただし、何も返されないように case ステートメントを記述したい場合、行が返されない場合は 0 を返しません。
select count(*) from Table1
where Field1 = 1 and Field3 = 110 and datediff(day,DateField,"5/21/2012") > 0
having Max(Field2) = Field2
上記のコードは、私が思うように 0 ではなく、何も返しません。