2011-12-16 2 views
1

У меня есть два столбца в базе данных: campus1 и campus2, я хочу написать запрос, чтобы сделать следующий сценарий:если заявление в SQL запросе

Если campus2 равна нулю, то сравнивать только campus1 данные, еще сравнить оба campus1 и campus2 данные.

Я написал запрос, как показано ниже, но получил сообщение об ошибке.

select * from tbl1 where 
case when campus2 is null then ([email protected] or campus1 is null) 
else 
    ([email protected] or campus1 is null) and ([email protected] or campus2 is null) 
end 

Может ли кто-нибудь указать мне направление вправо?

+0

, что не имеет смысла - даже если это compil ed, условия в предложении 'else' охватывают условие, которое вы, похоже, проверяете выше. –

+1

hrmm, не думаю, что для этого вам понадобится аргумент case. как насчет select * from tbl1 где (campus2 - null или campus2 = @ campus2) и campus1 = @ campus1. – Intrigue

ответ

0

Вам не нужно тематическое заявление здесь просто выписывать булеву логику

WHERE 
(campus2 is null 
     AND 
    ([email protected] or campus1 is null)) 
OR 
(campus2 is not null 
     AND 
    ([email protected] or campus1 is null)     
    and [email protected]) 
) 

Как примечание стороны, если вы действительно хотите использовать Case заявление в пункте Where вы обычно пишете его в этой форме

WHERE 
     CASE WHEN condition THEN expression 
      ELSE otherExpression 
     END = @SomeParameter 

Это оценивает несколько условий в одно значение, которое будет сравниваться с параметром

+0

Спасибо. Теперь он отлично работает! – user788448

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