CASE..When条件在Oracle Sql中不起作用

问题描述 投票:0回答:1

我在查询中具有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';
sql oracle select case-when
1个回答
1
投票

如果您不希望该值为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

(假设不满足第一个条件)。

© www.soinside.com 2019 - 2024. All rights reserved.