Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从查询sql中使用的MAX()生成的结果中删除空值_Sql_Sql Server 2008 - Fatal编程技术网

从查询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
子句将返回no
NULL
行,我没有想到这一点。我只是好奇,为什么要在()而不是添加where语句?@Y.Z.:因为您不能在
where
子句中直接引用别名。出于语法原因,需要派生表。