CASE WHEN语句中的“IN”条件在WHERE子句上怎么使用?

4

我有一个复杂的情况。我想编写一个包含“case when”条件的SQL查询,放在“where”子句中。

就像这样:

SELECT *
FROM <table>
WHERE
<Column1> in
   CASE <Column2>
      WHEN 1 THEN ('OP', 'CL') 
      WHEN 0 THEN ('RE', 'ST')
END

Column1必须是“in”,而不是“=”,因为在Column1的条件中有多个值。该查询返回“Incorrect syntax near ','.”错误。

你能给我任何建议吗?(非常抱歉我的英语不好。)

编辑:我想我误解了。如果Column2为1,则条件必须像这样“IN('OP', 'CL')”,否则Column1为2,则条件必须像这样“IN ('RE', 'ST')”。

2个回答

6

你不需要使用 CASE 表达式,可以像这样使用 OR

SELECT *
FROM <table>
WHERE (Column2 = 1 AND Column1 IN ('OP', 'CL')) OR
    (Column2 = 0 AND Column1 IN ('RE', 'ST'))

+1,但修正该语句,它与原帖的陈述不一致。 - Les
我想我误解了。如果Column2为1,则条件必须为"IN ('OP','CL')",否则Column1为2,则条件必须为"IN ('RE','ST')"。 - juniorDev
@Les - 是的,我把column1和column2搞反了;已经修改了。给我投反对票的人,请重新审视一下。 - LittleBobbyTables - Au Revoir
我需要根据第二列编写查询,以第一列(带有“in”条件)为依据。 - juniorDev
现在我尝试了一下,对我而言可行。 (起初我写错了列。)感谢大家。 - juniorDev

-1
Select * from table where <Column1> in (Select case <Column2> when 1 then ('OP','CL') when
0 then  ('RE','ST'))

这段代码不起作用。也许在之前的 SQL Server 版本中它能够工作,但我现在运行的是 2008 版本,而且它并没有起作用。 - Malachi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接