如何使用 in 运算符

How to use case with in operator

有这样的查询:

declare @case int =  1

SELECT a.column1,b.column2
FROM tbl1 a
INNER JOIN tbl2 b on a.id = b.id and a.category in(1,2,3,4,5)

需要@case = 1时类别必须在(1,2,3,4,5),@case = 2时类别必须在(1,2,4,5)。 像这样:

 SELECT a.column1,b.column2
 FROM tbl1 a
 INNER JOIN tbl2 b on a.id = b.id and (CASE WHEN @case = 1 THEN a.category in(1,2,3,4,5) WHEN @case = 2 THEN (1,2,4,5) ELSE '')

怎么做?

SELECT a.column1,b.column2
FROM tbl1 a
INNER JOIN tbl2 b on a.id = b.id 
                 and 
                 (
                     (@case = 1 and a.category in (1,2,3,4,5)) OR
                     (@case = 2 and a.category in (1,2,4,5))
                 ) 

为了便于阅读,我添加了括号。并非所有这些都是必需的。

另一个答案更好,但如果你碰巧想用案例来做,你可以这样做

SELECT a.column1,b.column2
FROM tbl1 a
INNER JOIN tbl2 b on a.id = b.id and 
    (    CASE WHEN @case = 1 and a.category in(1,2,3,4,5) THEN 1
              WHEN @case = 2 and a.category in(1,2,3,4) THEN 1 
              ELSE 0
         END
    ) = 1