2017-10-12 52 views
0

我的查询是下面声明的情况下,我需要的是当我通过-1参数没有条件应该叫别人当其他值都通过它应该叫状态如何插入在条件

下面我曾尝试但它不起作用

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

的可能的复制 - (https://stackoverflow.com/questions/414431/sql-case-expression-inside-where) – F0XS

+0

0 = 0表示真所以所有数值应[SQL CASE内部WHERE表达式]在-1时返回?还是你不想要价值?或者是其他东西?我没有跟随。当输入-1时,'RequestStatus'的值应该是多少;空值? – xQbert

+0

“不工作”是什么意思? –

回答

1

也许你的意思是:

的问题是你不能使用case来控制where子句中的整个表达式,否则,你有动态的SQL,将不得不以其他方式管理。

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 RequestStatus = CASE WHEN @RequestStatus=-1 THEN RequestStatus 
           ELSE @RequestStatus 
          END 
1

case可用于在值之间进行选择,而不是语法元素。你可以模仿你想用一个直接的or运营商的行为:

WHERE @RequestStatus = -1 OR RequestStatus = @RequestStatus 

或者仅使用in运营商作为快捷方式:

WHERE @RequestStatus IN (-1, RequestStatus) 
+0

这不是OP想要的。如果'RequestStatus'为-1,'WHERE'应该只读'0 = 0'。但是,'RequestStatus = -1'不等于'0 = 0'。 – waka

+1

这确实是OP所要的。如果'@ RequestStatus'为'-1'(给我所有的行)或'RequestStatus'等于'@ RequestStatus'(给我一个子集),谓词返回true。 – Phylogenesis