the problem you're running into is that depending on a condition, you want to either select from a list of values or from one value. the easy way to fix that is to choose from a list of values each and every time:
select * from sometable where value in ('a','b','c')
select * from sometable where value in ('a')
select * from sometable where value in ('b')
select * from sometable where value in ('c')
so you'd do something like
select * from sometable where value in case condition when 1 then ('a','b','c') when 2 then ('a') else ('b') end
but that doesn't work because the case wants to return a literal. so the other option is to branch BEFORE you do your select. not the most elegant solution, but it should work. there may be a better way... i just can't think of it off the top of my head.