[英]sql query using having clause with no results not returning null
如果我在表中插入以下值
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")
我的查詢將嘗試獲取的是Field4中某個日期的最大值與Field2中的值。
例
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,因為這將進入一個臨時表,然后與另一個表中的值相加。 謝謝。
編輯-新問題部分據我了解,我可能在此處將notull用於錯誤的事情。 我可以接受的。 但是,如果我想編寫一個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。
您沒有得到任何結果,因為您插入的3條記錄中沒有一個具有Field3的110。 結果,該查詢不返回任何行。 你ISNULL
如果不是5,99,或3,這些價值觀將只用於NULL
的返回行。
如果此記錄在您的表中:
INSERT INTO Table1 (Field1, Field2, Field3, Field4, DateField)
VALUES(1, 3, 110, NULL, "5/10/2012")
該記錄將符合您的Field3 = 110
要求,然后具有Field4 Null(由SELECT邏輯設置為0),但由於沒有,因此查詢將不會返回任何內容。
第2部分
似乎HAVING
正在從結果集中刪除0
記錄,因為WHERE
子句之后沒有剩余記錄可以與HAVING
條件匹配。
如果要查看是否有任何符合條件的結果,可以使用EXISTS子句
IF EXISTS(
SELECT COUNT(*)
FROM Table1 AS t
WHERE t.Field1 = 1
AND t.Field3 = 110
AND DATEDIFF(day, t.DateField, "5/21/2012") > 0
HAVING MAX(Field2) = Field2
)
BEGIN
--Code for when the record Exists
END
ELSE
BEGIN
--No records logic here
END
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.