如何在where条件中插入case语句

时间:2017-10-12 12:48:47

标签: sql sql-server select sql-server-2012

我的查询如下,我需要的是当我在参数中传递-1时无条件应该在其他值传递时调用else它应该调用条件

我尝试了以下查询,但它无效

SELECT RequestID
     , AgencyName
     , Contact
     , DeliveryAddress
     , ContactPhone
     , ContactEmailAddress
     , RequestDate
     , CASE WHEN RequestStatus=0 THEN 'Pending' 
            ELSE CASE WHEN RequestStatus=1 THEN 'Approved' 
                      ELSE 'Denied' 
                 END 
       END AS 'RequestStatus'
    FROM tblRequest 
    WHERE CASE WHEN @RequestStatus=-1 THEN '0'='0' 
               ELSE RequestStatus= @RequestStatus 
          END

2 个答案:

答案 0 :(得分:1)

case可用于在值之间进行选择,而不是语法元素。您可以使用直接or运算符模拟所需的行为:

WHERE @RequestStatus = -1 OR RequestStatus = @RequestStatus

或者只使用in运算符作为快捷方式:

WHERE @RequestStatus IN (-1, RequestStatus)

答案 1 :(得分:1)

也许你的意思是:

问题是你无法使用case一次只控制where子句中的整个表达式;否则你有动态SQL,并且必须以另一种方式管理。

UIAlertController