我想在@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
答案 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')