我正在使用变量来使我的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的其他简单方法?

最佳答案

您可以结合使用ANDOR来做到这一点:

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;

08-06 16:28