2013-10-16 96 views
0

有人可以帮我处理下面的sql查询。Sql server CASE和IN where子句

当您想按阶段I过滤时,应该返回阶段I或阶段I/II的结果,但不返回阶段II或阶段III。

同样,对于第二阶段,它应该返回与结果相I/II,II期或II/III期

select Phase from Phases where Phase in (case 

when @phase='Phase I' then '''Phase I'',''Phase I/II''' 
when @phase='Phase II' then '''Phase I/II'',''Phase II'',''Phase II/III''' 
end) 

我不想使用动态查询来解决这一问题。

+0

你到底想达到什么目的?发布一些日期和你想要的回报查询。 –

+0

当你想按阶段I过滤时,它应该寻找阶段I或阶段I/II,但不要阶段II或阶段III。同样,对于第二阶段,它应该返回第一阶段/第二阶段,第二阶段或第二阶段/第三阶段的结果 – WorkInProgress

回答

3

布尔逻辑可以解决这个问题:

select Phase 
    from Phases 
where (@phase = 'Phase I' and Phase in ('Phase I', 'Phase I/II')) 
    or (@phase = 'Phase II' and Phase in ('Phase I/II', 'Phase II', 'Phase II/III'))