使用多个表时如何使用case条件

ql3eal8s  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(333)

我想用case语句来检查信用卡的到期日。我有两张table-
表a-账号、账号
表b-账号、账户状态、信用卡到期日期
以上字段的数据类型为-账户号-编号、账户id-编号、账户状态-编号、信用卡到期日期-字符
我必须写查询,以检查卡是否将在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'))

请帮我纠正这个问题。

eoigrqb6

eoigrqb61#

您需要使用条件作为列,如下所示。
我修改了标准逻辑,如果今天和卡到期日的天数相差超过60天,那么它标记为“卡在2个月后到期”和“卡在30天以上”,改为“卡在1个月后到期”。但我认为如果日期的差异不符合这两个标准中的任何一个,你也需要另外一个部分出现

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

相关问题