WHERE子句中的CASE返回Error

时间:2015-09-17 13:21:44

标签: sql sql-server

我正在运行此代码:

SELECT hID 
  FROM logonsHistory
 WHERE aIDs NOT LIKE '%''101''%' AND
 CASE src 

WHEN 0 THEN 

uID IN(29,41,42,45,49,50,57,73,83,107,166,349,356,367,375,376,416,471,472,473,474,481) 

END

我收到此错误:

  

关键字' IN'

附近的语法不正确

我不知道出了什么问题。

5 个答案:

答案 0 :(得分:1)

在这种情况下,CASE语句不合适。只需使用简单的OR条件:

SELECT hID 
  FROM logonsHistory
 WHERE aIDs NOT LIKE '%''101''%'
 AND (
    src <> 0 -- add a COALESCE here if src can be NULL
    OR uID IN(29,41,42,45,49,50,57,73,83,107,166,349,356,367,375,376,416,471,472,473,474,481) 
 )

...这基本上相当于只应用uID过滤src = 0,这就是您尝试使用查询完成的操作。

答案 1 :(得分:0)

when语句的case部分应选择单个值。你要做的是检查一个条件。

或者,如果您要检查这些值中的uid,则应该

 case when src = 0 then
                        case when uID IN (29,41,42,45,49,50,57,73,83,107,166,349,356,367,375,376,416,471,472,473,474,481)
                        then 'It is a Client ID'
                        -- add another when or else part here if required
                        end
 else 'Not a UID and not a Client ID'
 end

答案 2 :(得分:0)

听起来你不必使用CASE请测试一下

SELECT hID
  FROM logonsHistory
 WHERE aIDs NOT LIKE '%''101''%'
       AND ( (src = 0 --scr is 0 => must have uid in the list
              AND UID IN (29,41,42,45,49,50,57,73,83,107,166,349,356,367,375,376,416,471,472,473,474,481))
            OR src <> 0) --else src is not 0 and there is no additional condition

我对您not like的情况有疑问,您是否单独测试了它?

答案 3 :(得分:0)

猜猜这就是你要找的东西

WHERE aIDs NOT LIKE '%''101''%' or
( 
src = 0 
AND
uID IN(29,41,42,45,49,50,57,73,83,107,166,349,356,367,375,376,416,471,472,473,474,481
) 

答案 4 :(得分:0)

看起来你的陈述格式不正确。你在“当0然后......结束

”中设置条件而不是值

uID IN(29,41,42,45,49,50,57,73,83,107,166,349,356,367,375,376,416,471,472,473,474,481)您有条件且不应该在那里