我正在使用变量让我的SELECT以2种不同的“模式”运行:
DECLARE @Mode as Varchar(1) = 'A'
SELECT
CASE
WHEN @Mode = 'A'
THEN FieldABC * 2
ELSE FieldABC * 3
END AS FieldABC,
CASE
WHEN @Mode = 'A'
THEN FieldDEF
ELSE FieldGHI
END AS FieldJKL
WHERE
FieldABC BETWEEN 0 AND 100
当我想运行SELECT的“B”版本时,我只需要更改变量值。一切正常。
我现在想要更改WHERE
子句,因此它也取决于变量:
IF @Mode = 'A' THEN
WHERE FieldABC > 0
ELSE
WHERE FieldABC < 0
END IF
除此之外,这种语法在SQL中完全是无意义的!
如何根据相同的变量实现我的WHERE
子句的两种不同风格 - 或者在两种不同模式之间切换SELECT
的其他简单方法?
答案 0 :(得分:7)
您可以结合使用AND
和OR
:
WHERE (@Mode='A' AND FieldABC > 0)
OR (@Mode='B' AND FieldABC < 0);
或使用CASE
表达式:
WHERE CASE
WHEN @Mode = 'A' AND FieldABC > 0 THEN 1
WHEN @Mode = 'B' AND FieldABC < 0 THEN 1
ELSE 0
END = 1;