从查询sql中使用的MAX()生成的结果中删除Null值

时间:2013-05-21 10:33:18

标签: sql sql-server-2008

当我使用查询时:

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

表格给出了最大日期,但如果条件不满足,则返回一个NULL表格。所以会有一个空行。但我需要它作为空数据表。我如何删除noresult上的null?

4 个答案:

答案 0 :(得分: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

答案 1 :(得分:4)

使用派生表并对其进行过滤:

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

答案 2 :(得分:3)

即使聚合空集,标量聚合也始终返回单行。

您也可以

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

GROUP BY子句使其成为vector aggregate rather than scalar,如果NULL中没有与UMS_LOGENTRY_DTL匹配的行,则不会返回WHERE行。< / p>

答案 3 :(得分: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