在sql中的case语句?

时间:2015-06-02 10:31:16

标签: sql

我有一个名为Employee.Employee表的表 ID,Name,DOB,DOJ,Designation columns。在sp中想要表现出来 当输入para的值为1时,在select子句中选择DOB以及在where子句中使用DOJ 这是我的查询。我能够在select子句中管理,但不能在where子句中管理。

select Name,Designation ,case when @value = 1 then DOB else DOJ end  from Employee
where DOB >='06/01/2015' and DOB < dateadd(dd,1,'06/01/2015')

如果@val不是1,则想在select和where子句中使用DOJ。

5 个答案:

答案 0 :(得分:1)

对于WHERE子句,最简单的方法是使用两个不同的测试:

#define IS_ARRAY(x)  (sizeof(x) > SOME_VALUE)

答案 1 :(得分:1)

从头到尾

... WHERE (@val = 1 AND DOB = '...') OR (@val = 0 AND DOJ = '...') ...

答案 2 :(得分:1)

CASE嵌套在派生表中,智能优化工具应该能够将其解析为DOBDOJ

select *
from
 (
   select Name,Designation,
      case when @value = 1 then DOB else DOJ end as dt
   from Employee
 ) as dt
where dt >='06/01/2015' and dt < dateadd(dd,1,'06/01/2015')

答案 3 :(得分:0)

最终表现不佳,但这应该可以解决问题:

Edit Template > Edit a copy

你可以在where子句中使用相同的case-when块...

答案 4 :(得分:0)

试试这个,它符合你的要求吗?

select Name,Designation ,case when @value = 1 then DOB else DOJ end  from Employee
where  WHERE (@val = 1 AND DOB >='06/01/2015') OR (@val <> 1 AND DOJ < dateadd(dd,1,'06/01/2015'))