如何在WHERE子句中使用IF ... ELSE条件?

时间:2013-11-15 14:17:09

标签: sql oracle if-statement case

我想合并我的2 If语句的条件结果。首先,如果语句结果只显示0结果,则在第二个if语句结果中,其中一个必须大于0 ...我想要做的是保留第二个条件,如果像我的代码那样的statament则先修改...

 If (Inventory) <> 0 Then 
    If Apple = "" And Banana = "" Then
        strSQL = strSQL & " AND (myApple = 0 AND myBanana = 0)"
    End If
End If

 If int(Inventory) <> -1 Then   
    If Apple = "" And Banana = "" Then
        strSQL = strSQL & " AND (myApple <> 0 OR myBanana <> 0)"
    End If
End If

这是一张小表,显示了我的两个条件导致的结果:我想要的是什么

Inventory  |  Desired result
-----------+---------------
-1         |  show both zero or at least one not be zero (Show all)
 0         |  at least one must not be zero |  

2 个答案:

答案 0 :(得分:2)

通常在WHERE子句中,您必须使用CASE。

How to use If Statement in Where Clause in SQL?

他们提供相关链接。所以你必须写。

答案 1 :(得分:0)

这是一个小表,显示了您的两个条件导致的结果:

Inventory  |  Desired result
-----------+---------------
-1         |  both must be zero
 0         |  at least one must not be zero
all others |  both must be zero and at least one must not be zero

您会看到任何非0或-1的数字都会导致永远无法满足的条件。考虑你的请求,画一个像我这样的表,然后相应地写你的if语句。你在那里用什么语言?这是一种基本方言吗?也许有一个CASE,SWITCH或ELSEIF结构可以使您的条件更具可读性。

编辑:根据你编辑过的问题(但如上所述,一旦你有一个想要的结果表,写一个if语句很容易,你可以自己完成):

IF Inventory = 0 THEN
  strSQL = strSQL & " AND (myApple <> 0 OR myBanana <> 0) "
END IF

无需检查Inventory = -1,因为“零或至少一个不为零”表示全部(零,一零或两者都不为零)。 (或者你想检查NOT NULL吗?)