2017-10-12 82 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