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