2015-04-02 2 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 строк для меня, но одна строка показывает NULL для столбца objecturl, что случается, если запись не найдена в [местоположений] таблицы.Исключить строки, которые возвращают NULL для столбца при использовании сазе

Как я могу изменить свой запрос, чтобы убедиться, что когда objecturl IS 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

Смежные вопросы