2015-04-23 116 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);