T-SQL。 WHERE 子句中使用 IN 运算符的 CASE 表达式

T-SQL. CASE expression in WHERE clause using IN operator

如果用户把 800 作为 @WorkShop 它应该 return 所有记录有 800 车间 ID 和 900 车间 ID。

如果用户将任何其他 ID 作为 @WorkShop 传递,它应该 return 只记录选择的 @WorkShop ID。

我试过以下方法:

SELECT *
FROM Test
WHERE Workshop IN ( 
                    CASE 
                        WHEN @WorkShop = N'800' THEN N'900' AND N'800' 
                        ELSE @WorkShop 
                    END 
                    ) 

这 return 是一个错误:

Incorrect syntax near the keyword 'and'.

所以总而言之,如果用户将 800 作为 @WorkShop 参数传递,它应该 return 类似于:

Workshop IN ('800', '900')

这是你想要的吗?

SELECT *
FROM Test
WHERE ( @WorkShop = '800' AND  Workshop IN('800', '900') )
OR @WorkShop =  Workshop

试试这个:

SELECT *
FROM Test
WHERE (@WorkShop = '800' AND  (Workshop = '800' or  Workshop = '900'))
OR @WorkShop =  Workshop

另一种方法

SELECT *
FROM   Test
WHERE  Workshop IN ( @WorkShop, CASE
                                  WHEN @WorkShop = N'800' THEN N'900'
                                END )