Добавление предложения where на определенную дату

#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')