2015-04-23 91 views
-3

我需要查詢類似下面包含在where子句情況下,SQL SERVER WHERE子句

DECLARE @BillBack INT 
SET @BillBack=1 

SELECT 
    coloumn1, coloumn2, coloumn3, [Project_id] 
FROM 
    [Purchase_Details] 
WHERE 
    (CASE WHEN @BillBack = 0 
      THEN [Project_id] = 0 
      WHEN @BillBack = 1 
      THEN [Project_id] != 0 
     END 
     OR [Project_id] IN (1, 2, 3) 
    ) 

上面的查詢提供了錯誤,請幫我CASE基於定位

回答

3

以不同的方式做你的CASE ... WHEN,看來你正在嘗試做以下:

SELECT colomn1, column2, column3, [Project_id] 
FROM [Purchase_Details] 
WHERE 
    [Project_id] IN (1,2,3) 
    OR ((@BillBack = 0 AND [Project_id] = 0) 
     OR (@BillBack = 1 AND [Project_id] <> 0)); 
+0

謝謝,它的工作:) – Somashekhar

0

試試吧

WHERE ((@BillBack = 0 AND  [Project_id] = 0) OR (@BillBack = 1 AND [Project_id] !=0)) OR [Project_id] IN (1, 2, 3) 

這意味着如果BillBack爲零PROJECT_ID必須是0,或者如果BillBack是1個PROJECT_ID必須從零differente,如果兩個都是假的PROJECT_ID需要是1,2或3。

假設PROJECT_ID始終爲0或正數,你也可以嘗試:

WHERE @BillBack <= [Project_id] OR [Project_id] IN (1, 2, 3) 

這意味着如果BillBack爲0的說法是正確的只有PROJECT_ID也爲0如果BillBack爲1的聲明是真實的如果project_id大於0.或者如果(1,2,3)中的project_id爲

或者嘗試一些類似於你想要的布爾邏輯。

0

你的情況下,結果必須在where子句中的比較.. 嘗試

DECLARE @INT INT = 1; 
SELECT COL1, COL2 
FROM TABLE 
WHERE (COL2 = (CASE WHEN @INT = 1 THEN 0 ELSE 1 END)) 
OR COL1 IN (1,2,3);