我试图在case语句之后传递in子句但面临错误。
条件是
AND (CASE order_date>sysdate
then fee_rate_type in ('REGULAR','BONUS')
ELSE FEE_RATE_TYPE in ('REGULAR') END)
当我通过单一价值而非多次传递时(通过'奖金' REGULAR'奖金'奖金')然后它的工作正常。
表格结构:
ID fee_rate order_date
-- -------- ----------
1 REGULAR 02/02/2016
2 BONUS 02/02/2016
3 BONUS 02/02/2016
4 BONUS 02/02/2016
5 PROMO 02/02/2016
6 PROMO 02/02/2016
请协助。
答案 0 :(得分:1)
case
语句是一个返回单个值的表达式。如果您想使用case
,则需要返回一个值并进行比较:
(CASE order_date > sysdate and fee_rate_type in ('REGULAR', 'BONUS') then 1
order_date <= sysdate and FEE_RATE_TYPE in ('REGULAR') then 1
END) = 1
但是,我建议您不要在case
条款中使用where
。您可以将此表达为简单条件。这是一种方式:
((order_date > sysdate and fee_rate_type in ('REGULAR', 'BONUS') ) OR
(order_date <= sysdate and FEE_RATE_TYPE in ('REGULAR') )
)
或者,或许:
(fee_rate_type = 'REGULAR' or
(order_date > sysdate and fee_rate_type = 'BONUS')
)
答案 1 :(得分:-1)
尝试以下查询:
AND (CASE order_date>sysdate
then fee_rate_type = ALL ('REGULAR','BONUS')
ELSE FEE_RATE_TYPE in ('REGULAR') END)