2016-09-22 7 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 

しかし、これは動作しませんでした。だから私はwhere clause in sql if statementを参照してother SO Solutionsをチェックしましたが、それらのすべてがif Student then Datum1 < @Datum2 else Datum2 < @Datum2のようなeiterまたは決定を持つ問題を処理します。しかし、条件が真であれば、その声明を全く考慮しないことを望む。ここで私を助けることができる人は誰ですか?

+0

どのようにして従業員がグループのメンバーであるかを判断しています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」は無意味です。

このお試しください:そこEmployeeGroupフィールドだとあなたはEmployeeNameにフィルタリングしにデータムを追加したい場合は、表Datum2またはカテゴリ< @ Datum1 <> 'スチューデント

0

から

選択* をグループが 'Students'でない場合にのみフィルタリングします。

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