CASE..WEN не работает условие в Oracle Sql - PullRequest
0 голосов
/ 07 октября 2019

У меня ниже 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 вернул ноль.

  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';

1 Ответ

1 голос
/ 07 октября 2019

Если вы не хотите, чтобы значение когда-либо было 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

(при условии, что первое условие не выполнено).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...