我在查询中具有case when
以下条件,但无法以某种方式满足。
我想在case when
查询的select
中编写逻辑,以便当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';
如果您不希望该值为NULL
,请使用ELSE
。我想你想要:
(CASE WHEN t.LAST_TRADEABLE_DT is not null
THEN t.LAST_TRADEABLE_DT
WHEN t.opt_exer_typ = 'American' AND
t.mic_exch_code = 'XDMI'
THEN t.opt_expire_dt - 1
ELSE t.opt_expire_dt
END) last_tradedate,
我不是100%确定您想要的逻辑。在以下情况下,您的代码将返回NULL
值:
opt_exer_typ = 'American' and mic_exch_code <> XDMI
opt_exer_typ = 'American' and mic_exch_code IS NULL
opt_exer_typ IS NULL
(假设不满足第一个条件)。