0

通过搜索多个 SO 线程,我无法编写在 where 子句中返回适当条件的查询。例如,我有列 Col1int和一个变量var1,就像varchar现在我在查询下面使用的一样,但它不起作用。

Where CASE WHEN var1 = '1' THEN (Col1 = 1)  
WHEN var1 = '2' THEN (Col1 = 2)  
ELSE AND (1= 1) 
END

它给了我syntax error near '='

编辑:

如果我想要这样的条件怎么办

Col1 IN(条件....)

4

3 回答 3

6

我认为应该是这样的;

Where Col1 = CASE WHEN var1 IN ('1','2') THEN var1 ELSE Col1 END

或者

Where Col1 = CASE  var1 WHEN  '1' THEN 1
                        WHEN  '2' THEN 2
             ELSE Col1 END ...

作为旁注, ifCol1 is nullableneed to selectthose as well then 使用;

Where Col1 is null OR 
             Col1 = CASE  var1 WHEN  '1' THEN 1
                        WHEN  '2' THEN 2
             ELSE Col1 END ...
于 2013-01-31T12:41:06.263 回答
2

CASE 是一个返回值的表达式。它不适用于像 IF 这样的流逻辑控制(尽管类似的关键字在 VB 等某些语言中确实以这种方式工作)。尝试:

WHERE Col1 = CASE 
  WHEN var1 = '1' THEN 1
  WHEN var1 = '2' THEN 2 
  ELSE Col1
END

这将按照您在尝试过的代码中的预期工作,除非Col1 为 NULLable。一种解决方法是不能出现在您的数据中的魔法值:

WHERE COALESCE(Col1, -1) = CASE
  ...
ELSE COALESCE(Col1, -1) END
于 2013-01-31T12:41:28.700 回答
0

您需要将列放在案例之外:

where Col1 = case when var1 = '1' then 1
                  when var1 = '2' then 2
             end
      OR (var1 != '1' AND var1 != '2')
于 2013-01-31T12:40:47.920 回答