SQL - 不同的WHERE子句依赖于变量

时间:2017-08-08 14:24:22

标签: sql sql-server

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

1 个答案:

答案 0 :(得分:7)

您可以结合使用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;