#sql #sql-server
Вопрос:
Мне нужно реализовать запрос, который позволит мне получить категорию «Бытовая техника», только если дата покупки будет после 2016 года. То, что у меня есть сейчас, — это
Select * From table where level = 1 AND Company ='COC' AND Category = 'Appliances' AND PurchaseDate gt; 2016-01-01
проблема в том, что это приведет к фильтрации всех результатов по покупкам после 2016 года. Хотя я хочу получить все результаты, но только тогда, когда категория «Бытовая техника», я ничего не хочу до 2016 года. Как я могу это сделать?
Комментарии:
1.
where ((Category = 'Appliances' AND PurchaseDate gt; '2016-01-01') or category !='Appliances')
?2. Пожалуйста, отметьте СУБД, которые вы используете.
Ответ №1:
Просто используйте and
и or
, как вы могли бы использовать любую булеву алгебру. Не пытайтесь чрезмерно усложнять логику путем объединения case expressions
, так как это помешает оптимизатору запросов эффективно сканировать диапазон дат.
Select * From table where level = 1 and Company ='COC' and ( (Category = 'Appliances' AND PurchaseDate gt; '2016-01-01') or category lt;gt; 'Appliances' )
Ответ №2:
Попробуйте использовать ИЛИ в предложении WHERE
Select * from table Where (level = 1 AND Company ='COC' AND Category = 'Appliances' AND PurchaseDate gt; 2016-01-01) OR (level = 1 AND Company ='COC' AND Category lt;gt; 'Appliances')