2016-09-22 136 views
0

我有以下初始查询。WHERE子句中的独占IF语句

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,但他们都会照顾我们有问题的地方或者像if Student then Datum1 < @Datum2 else Datum2 < @Datum2这样的决定。但是,如果条件成立,我希望声明完全不被考虑。任何人可以帮助我吗?

+0

你如何确定'如果员工是组的成员s tudents'? – Siyual

+0

请勿在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并添加基准到过滤只有当组不是'学生'那么这就是你的查询应该是这样的:

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