首页 > 解决方案 > case 语句中的嵌套子查询返回 null

问题描述

我正在尝试运行一个嵌套的 sql 子查询,如果 datetime 列中的年份值不是 1799,则从原始表返回一个值,如果值为 1799,则从另一个表中的另一列返回最大值。我知道我我可能做了一些愚蠢的事情,但是当我应该得到日期时,我只会在“注销时间”列中得到 NULL。这是我的代码的简单版本:

 SELECT 
 CASE WHEN year(us.logofftime) = '1799' 
 THEN
                (SELECT max(ua.time)
                FROM useractivity ua
                WHERE ua.usersessionid = us.usersessionid)
        ELSE us.logofftime
        END) AS logofftime,
                    us.operatingsystem, us.country, 
                    us.source, us.logoffmethod 
FROM    UserSession us
WHERE us.logontime > '2017-07-01'
AND us.clientid = '12455';

编辑:我已将最后两行添加到查询中。

标签: sql

解决方案


你必须有很多NULLlogofftime——如果值是NULL,结果将是NULL

因此,也许您也打算替换这些值:

SELECT (CASE WHEN year(us.logofftime) = 1799 OR us.logofftime IS NULL
             THEN (SELECT max(ua.time)
                   FROM useractivity ua
                   WHERE ua.usersessionid = us.usersessionid
                  )
             ELSE us.logofftime
        END) AS logofftime,
      us.operatingsystem, us.country, 
       us.source, us.logoffmethod 
FROM UserSession us;

推荐阅读