SQL Server:具有IN条件的WHERE子句中的CASE语句

时间:2016-09-02 09:50:43

标签: sql-server

我想在@input作为输入值的存储过程中使用where子句中的case语句,如下所示:

SELECT my_column
FROM MY_TABLE
WHERE MY_TABLE.my_column in (CASE WHEN @input = '1' THEN ('A','B','C') ELSE ('A') END)

令人难以置信的是,当我在" THEN"之后只放置一个值时它会起作用。像这样:

SELECT my_column
FROM MY_TABLE
WHERE MY_TABLE.my_column in (CASE WHEN @input = '1' THEN ('C') ELSE ('A') END)

我是否可以将IN条件与我想要的CASE语句一起使用?还有另一种方法可以做我想要的吗?

感谢您的帮助,

CLJ

1 个答案:

答案 0 :(得分:4)

第一个查询的问题是CASE只返回一个标量值。它无法返回值列表。

相反,您只需使用OR

即可
SELECT  my_column
FROM    MY_TABLE
WHERE   (@input = '1' and MY_TABLE.my_column IN ('A','B','C'))
        OR
        (@input <> '1' and MY_TABLE.my_column = 'A')