0

我正在做一份报告,我无法以编程方式构建 SQL。我有两个值被输入到报告中。可以是以下三个选项之一的值:

  1. 赎回
  2. 购买
  3. 兑换和购买

查询需要有一个 WHERE 子句。如果输入“redeem”,它必须具有:

... WHERE balance < 0

如果输入“购买”,它必须具有:

... WHERE balance >= 0

如果两者都输入,则可以完全省略该条件,或者可以说:

... WHERE balance >= 0 OR balance < 0 --> but this is redundant

有没有办法在 SQL 中应用这种逻辑?在 SQL 中是否可能出现这样的情况:

SELECT * FROM account WHERE (if param1 = 'redeem' then 'balance <= 0)  ... etc

?

4

4 回答 4

3

是的。您快到了。

WHERE (param='redeem' and balance <=0) or (param='purchase' and balance>=0) or (param='redeem AND purchase ')
于 2013-05-30T12:56:18.590 回答
1

CASE在您的WHERE子句中使用语句。您可以在此处找到示例。

我在 MySQL 中尝试了以下代码,它可以工作:

SET @param = 'purchase';

SELECT * FROM TEST.ACCOUNT
WHERE CASE
    WHEN @param = 'redeem' THEN BALANCE < 0
    WHEN @param = 'purchase' THEN BALANCE >= 0
    ELSE TRUE
END;
于 2013-05-30T12:55:09.057 回答
0

这会奏效吗?

WHERE 
   (purchase is not null && balance >= 0)
OR
   (redeem is not null && balance < 0)
于 2013-05-30T12:54:46.073 回答
0
CASE WHEN param1 = 'redeem' THEN balance <= 0
于 2013-05-30T12:56:37.590 回答