【发布时间】:2020-02-04 17:10:57
【问题描述】:
我在查询中有低于 case when 的条件,但并没有得到满足。
我想在select查询中的case when中编写逻辑,这样当LAST_TRADEABLE_DT不为空时取LAST_TRADEABLE_DT,当LAST_TRADEABLE_DT为空时,应满足以下条件:
WHEN t.opt_exer_typ = 'American'
AND t.mic_exch_code = 'XDMI'
THEN t.opt_expire_dt - 1
WHEN t.opt_exer_typ != 'American'
THEN t.opt_expire_dt
我已经写了下面的查询,但我得到last_tradedate 为空。我从不希望 last_tradedate 返回 null。
SELECT
t.opt_exer_typ,
t.mic_exch_code,
t.ID_BB_GLOBAL,
t.LAST_TRADEABLE_DT,
t.OPT_EXER_TYP,
(
CASE
WHEN t.LAST_TRADEABLE_DT is not null
THEN t.LAST_TRADEABLE_DT
WHEN t.LAST_TRADEABLE_DT IS NULL
AND t.opt_exer_typ = 'American'
AND t.mic_exch_code = 'XDMI'
THEN t.opt_expire_dt - 1
WHEN t.LAST_TRADEABLE_DT IS NULL
AND t.opt_exer_typ != 'American'
THEN t.opt_expire_dt
END) last_tradedate,
t.OPT_EXPIRE_DT
FROM
TEST_AGG t where t.ID_BB_GLOBAL = 'XXX1234';
【问题讨论】:
-
正如预期的那样,因为该行的列值没有条件为真。
标签: sql oracle select case-when