Как использовать условие CASE при использовании более чем одной таблицы - PullRequest
0 голосов
/ 05 августа 2020

Я хочу использовать оператор case для проверки истечения срока действия кредитной карты. У меня есть две таблицы -

  1. Table_A - account_no, account_id
  2. Table_B - account_no, account_status, date_of_card_expiry

Типы данных вышеперечисленных полей - account_no - NUMBER, account_id - NUMBER, account_status - NUMBER, date_of_card_expiry - CHAR

Мне нужно написать запрос, чтобы проверить, истечет ли срок действия карты через 30 дней или 60 дней. Ниже приведен запрос, который у меня есть, но он дает неверную ошибку реляционного оператора в строке 4.

SELECT a.account_no, a.account_id, b.account_status,b.date_of_card_expiry
  FROM Table_A a
  JOIN Table_B b
    ON (a.account_no = b.account_no
   AND a.account_id IN ('1','2','7')
   AND (
         CASE WHEN (to_date(b.date_of_card_expiry, 'MMYY')) = to_date(to_char(sysdate+60, 'MMYY'),'MMYY') then 'card will expire after 2 months'
         CASE WHEN (to_date(b.date_of_card_expiry, 'MMYY')) = to_date(to_char(sysdate+30, 'MMYY'),'MMYY') then 'card will expire after 1 month'))

Пожалуйста, помогите мне исправить запрос.

1 Ответ

2 голосов
/ 05 августа 2020

Вам нужно будет использовать критерии как столбец, как показано ниже.

Я изменил logi критериев c, чтобы они были следующими, если разница дней между сегодняшним днем ​​и card_expiry_date больше, чем 60 дней, затем он помечается как «срок действия карты истекает через 2 месяца» и более 30 дней, чтобы читать «срок действия карты истекает через 1 месяц». Но я думаю, вам также понадобится часть else, чтобы появиться, если разница в датах не соответствует ни одному из двух критериев

SELECT a.account_no, a.account_id, b.account_status,b.date_of_card_expiry
       ,CASE WHEN  to_date(b.date_of_card_expiry, 'MMYY')-trunc(sysdate)>=60 then 
                  'card will expire after 2 months'
             WHEN to_date(b.date_of_card_expiry, 'MMYY')-trunc(sysdate)>=30  then 
                  'card will expire after 1 month'
        END as card_status
  FROM Table_A a
  JOIN Table_B b
    ON (a.account_no = b.account_no
   AND a.account_id IN ('1','2','7')
...