Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 如何使用in操作符的用例_Sql Server_Sql Server 2008_Tsql - Fatal编程技术网

Sql server 如何使用in操作符的用例

Sql server 如何使用in操作符的用例,sql-server,sql-server-2008,tsql,Sql Server,Sql Server 2008,Tsql,有如下查询: 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

有如下查询:

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))
                 ) 

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

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

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