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

时间:2015-06-01 13:05:34

标签: sql sql-server tsql case where

如果用户将800设为@WorkShop,则应返回所有具有800个研讨会ID和900个研讨会ID的记录。

如果用户将任何其他ID传递为@WorkShop,则应仅返回选择@WorkShop ID的记录。

我试过以下:

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

这会返回错误:

Incorrect syntax near the keyword 'and'.

总之,如果用户将800作为@WorkShop参数传递它应该返回类似的内容:

Workshop IN ('800', '900')

3 个答案:

答案 0 :(得分:8)

这是你想要的吗?

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

答案 1 :(得分:2)

另一种方法

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

答案 2 :(得分:1)

试试这个:

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