如果..Else或Case在WHERE子句中 - 不同的东西

时间:2011-06-29 22:28:19

标签: sql if-statement conditional case where

我已经阅读了q& a的大量信息,但是没有一个符合我想要实现的目标。 我甚至不知道这是否可能!任何帮助/建议将不胜感激。

我正在尝试基于

构建条件WHERE子句
CustID (int) = @CustomerID 

如果@CustomerID = 0,那么我希望结果为WHERE CustID > 0(即返回所有客户),否则我只想要某些客户CustID = @CustomerID

这可能吗?

3 个答案:

答案 0 :(得分:15)

就这么做 WHERE(@CustomerID = 0或CustID = @CustomerID)

答案 1 :(得分:6)

这样的事情?

SELECT * 
FROM YOURTABLE
WHERE 
( CASE 
     WHEN @CustomerID = 0 THEN CustID 
     ELSE 1 
  END
) > 0
AND 
( CASE 
     WHEN @CustomerID <> 0 THEN @CustomerID 
     ELSE CUSTID 
  END
) = CUSTID

答案 2 :(得分:0)

在sql中模拟IF-ELSE语句的最常用方法是CASE和DECODE(至少在oracle中): Ex伪代码:

if (x == 1) then y; else if (x == 2) then z; end if

CASE: select case x when 1 then y when 2 then z end example from dual;

DECODE:     select decode(x,1,y,2,z) example from dual;