我有一个名为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。
答案 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
嵌套在派生表中,智能优化工具应该能够将其解析为DOB
或DOJ
:
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'))