2013-05-21 26 views
5

使用MAX()生成的結果中取出空值當我使用查詢:從查詢SQL

select MAX(DT_LOGDATE) 
from UMS_LOGENTRY_DTL 
where C_INPUTMODE='R' and VC_DEVICEID=10 

的表給出了最大日期,但如果條件不成立則返回一個數據表與NULL。所以會有一個空行。但我需要它作爲空數據表。我如何刪除noresult上的null?

回答

11

您可以使用HAVING子句:

SELECT MAX(DT_LOGDATE) 
FROM   UMS_LOGENTRY_DTL 
WHERE  C_INPUTMODE='R' and VC_DEVICEID=10 
HAVING MAX(DT_LOGDATE) IS NOT NULL 
+0

這是一個很好的,我沒有想到這一點。 –

1

您可以使用查詢作爲子查詢,並添加另一個條件:

select max_date 
from 
(
    select MAX(DT_LOGDATE) max_date 
    from UMS_LOGENTRY_DTL 
    where C_INPUTMODE='R' and VC_DEVICEID=10 
) sub 
where sub.max_date is not null 
+0

謝謝。工作 –

3

使用上派生表和過濾:

select * 
from (
    select MAX(DT_LOGDATE) as max_date 
    from UMS_LOGENTRY_DTL 
    where C_INPUTMODE='R' 
    and VC_DEVICEID=10 
) t 
where max_date is not null 
+0

謝謝..工作精細 –

+0

我只是好奇,爲什麼你想寫在()而不是添加where語句? –

+0

@ Y.Z .:因爲你不能直接在'where'子句中引用別名。出於語法原因,派生表是必需的。 –

3

即使聚合一個空集,標量聚合總是返回單個行。

你也可以做

SELECT MAX(DT_LOGDATE) 
FROM UMS_LOGENTRY_DTL 
WHERE C_INPUTMODE = 'R' 
     AND VC_DEVICEID = 10 
GROUP BY() 

GROUP BY條款使得它是否有UMS_LOGENTRY_DTL沒有行匹配WHERE一個vector aggregate rather than scalar沒有NULL一行將被退回。