情况下,SQL SERVER WHERE子句
问题描述:
我需要查询类似下面包含在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基于定位
答
以不同的方式做你的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));
答
试试吧
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为
或者尝试一些类似于你想要的布尔逻辑。
答
你的情况下,结果必须在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);
谢谢,它的工作:) – Somashekhar