6

当我使用查询时:

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

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

4

4 回答 4

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
于 2013-05-21T10:39:45.097 回答
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
于 2013-05-21T10:36:38.827 回答
3

即使聚合一个空集,标量聚合也总是返回单行。

你也可以做

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

GROUP BY子句使其成为向量聚合而不是标量,如果没有匹配的NULL行,则不会返回任何行。UMS_LOGENTRY_DTLWHERE

于 2013-05-21T10:54:46.600 回答
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
于 2013-05-21T10:36:36.967 回答