我正在使用变量来使我的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
子句的2种不同风格-或在2种不同模式之间切换SELECT
的其他简单方法? 最佳答案
您可以结合使用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;