2015-04-02 65 views
0
SELECT ir.objectid,ir.objecttype,ir.name,ir.email,ir.createdate, 
CASE objecttype 
    WHEN 1 THEN (select friendlyurl 
     from locations 
     where id = ir.objectid) 
END as objecturl 
FROM inforequests ir 
WHERE createdate > '1/1/2014' 
order by CreateDate asc 

此查询为我返回10行,但1行显示NULL为列objecturl,如果在[位置]表中找不到记录,则会发生这种情况。排除使用Case语句时返回NULL列的行

如何更改我的查询以确保当objecturl为NULL时,该行未返回,因此在我的情况下,我的查询只返回9行。

回答

1

将它添加到WHERE条款:

where createdate > '1/1/2014' and objecttype = 1 

因为你CASE不处理任何其他值,这将导致一个NULL时objecttype <> 1

或者,你可以窝SELECT S:

select * 
    from (SELECT ir.objectid,ir.objecttype,ir.name,ir.email,ir.createdate, 
    CASE objecttype 
     WHEN 1 THEN (select friendlyurl 
      from locations 
      where id = ir.objectid) 
    END as objecturl 
    FROM inforequests ir 
    WHERE createdate > '1/1/2014') as Temp 
where objecturl is not NULL 
order by CreateDate asc 

注意,这是有些不同,因为它也将排除其相关子查询返回NULL行。

+0

您的第一个建议对我来说并不适用,嵌套的解决方案确实如此。谢谢! – Flo 2015-04-02 17:23:51