2016-09-22 2 views
0

У меня есть следующий начальный запрос.Эксклюзивный оператор IF в предложении WHERE

Select * from Table 
where Datum1 < @Datum2 
and Employee_Name = Employee_Name 

Но я хочу, чтобы фильтровать Datum1 < Datum2 только если работник является членом группы учащихся. Для сотрудников, не являющихся студентами, я не хочу фильтровать Datum1 < @Datum2.

Моя первая мысль была

Select * from Table 
where CASE WHEN Datum1 < @Datum2 END 
and Employee_Name = Employee_Name 

Но это не работает. Поэтому я проверил other SO Solutions, ссылаясь на where clause in sql if statement, но все они заботятся о проблемах, где у нас есть eiter или решение вроде if Student then Datum1 < @Datum2 else Datum2 < @Datum2. Но я хочу, чтобы утверждение не рассматривалось вообще, если условие истинно. Кто может мне помочь?

+0

Как вы определяете ', если Employee является членом группы s tudents'? – Siyual

+0

Не используйте выражения case в предложении WHERE. Вместо этого используйте AND/OR. – jarlh

ответ

3

Вы можете сделать это с помощью инструкции OR, учитывающей оба сценария. Я предполагаю, что есть поле, называемое Employee_Group, что не было упомянуто в вопросе, но это должно направить вас в правильном направлении:

Select * 
From Table 
Where Employee_Group <> 'Students' 
Or 
(
    Employee_Group = 'Students' 
And Datum1 < @Datum2 
) 
And  Employee_Name = @Employee_Name 
0

Ваш пункт «Employee_Name = Employee_Name» бесполезно.

Попробуйте это:

Select * из таблицы где Datum1 < @ Datum2 или категории <> 'Студент'

0

Если есть поле EmployeeGroup и вы хотите отфильтровать EmployeeName и добавить Datum к фильтровать только тогда, когда группа не является «Учащимся», то вот как выглядит ваш запрос:

SELECT * FROM Table 
    WHERE EmployeeName = @employeeName 
    AND (Datum < @datum2 OR EmployeeGroup <> 'Students')