从查询sql中使用的MAX()生成的结果中删除空值
当我使用查询时:从查询sql中使用的MAX()生成的结果中删除空值,sql,sql-server-2008,Sql,Sql Server 2008,当我使用查询时: select MAX(DT_LOGDATE) from UMS_LOGENTRY_DTL where C_INPUTMODE='R' and VC_DEVICEID=10 该表给出了最长日期,但如果不满足该条件,则返回一个空值的数据表。因此将有一个空行。但我需要它作为空数据表。如何删除noresult上的空值?您可以将查询用作子查询并添加另一个条件: select max_date from ( select MAX(DT_LOGDATE) max_date
select MAX(DT_LOGDATE)
from UMS_LOGENTRY_DTL
where C_INPUTMODE='R' and VC_DEVICEID=10
该表给出了最长日期,但如果不满足该条件,则返回一个空值的数据表。因此将有一个空行。但我需要它作为空数据表。如何删除noresult上的空值?您可以将查询用作子查询并添加另一个条件:
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
使用派生表并对其进行筛选:
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
您可以使用HAVING子句:
SELECT MAX(DT_LOGDATE)
FROM UMS_LOGENTRY_DTL
WHERE C_INPUTMODE='R' and VC_DEVICEID=10
HAVING MAX(DT_LOGDATE) IS NOT NULL
即使聚合一个空集,标量聚合也始终返回一行 你也可以
SELECT MAX(DT_LOGDATE)
FROM UMS_LOGENTRY_DTL
WHERE C_INPUTMODE = 'R'
AND VC_DEVICEID = 10
GROUP BY ()
如果
UMS\u LOGENTRY\u DTL
中没有与WHERE
匹配的行,则GROUP BY
子句将返回noNULL
行,我没有想到这一点。我只是好奇,为什么要在()而不是添加where语句?@Y.Z.:因为您不能在where
子句中直接引用别名。出于语法原因,需要派生表。