Oracle LISTAGG和Coalesce

问题描述

我已经整理了下表EPS_PROPOSAL_EXT_T

+--------------------+------------+------------+
| PROPOSAL_NUMBER    |ONR_OPTION_1|ONR_Option_2|   ...
+--------------------+------------+------------+
|        1234        |      N     |      N     |   ...
|        1235        |      Y     |      Y     |   ...
|        1236        |      N     |      Y     |   ... 
+--------------------+------------+------------+

这里的问题是我需要对所有这些不同的ONR_Options进行LISTAGG,但是我不能让它们显示为'Y'。我需要将'Y'的内容替换为人类可以理解的内容。请参阅下面的SELECT语句,我已尝试这样做:

SELECT eps.PROPOSAL_NUMBER,eps.TITLE,per.FULL_NAME,ext.NRP_IREF_CD,ext.RESEARCH_TYPE_CD,nsf.NSF_CODE,ext.NPS_THRUST_DESCRIPTION,CASE
        WHEN ext.ONR_Option_1 = 'Y' THEN 'Option 1'
        WHEN ext.ONR_Option_2 = 'Y' THEN 'Option 2'
        WHEN ext.ONR_Option_3 = 'Y' THEN 'Option 3'
        WHEN ext.ONR_Option_4 = 'Y' THEN 'Option 4'
        WHEN ext.ONR_Option_5 = 'Y' THEN 'Option 5'
        WHEN ext.ONR_Option_6 = 'Y' THEN 'Option 6'
        WHEN ext.ONR_Option_7 = 'Y' THEN 'Option 7'
        WHEN ext.ONR_Option_8 = 'Y' THEN 'Option 8'
        WHEN ext.ONR_Option_9 = 'Y' THEN 'Option 9' 
        WHEN ext.ONR_NOT_APPLICABLE = 'Y' THEN 'Not Applicable'
        ELSE ''
   END ONR
FROM EPS_PROPOSAL eps
LEFT JOIN EPS_PROPOSAL_EXT_T ext
    ON eps.PROPOSAL_NUMBER = ext.PROPOSAL_NUMBER
LEFT JOIN EPS_PROP_PERSON per
    ON eps.PROPOSAL_NUMBER = per.PROPOSAL_NUMBER AND
      (per.PROP_PERSON_ROLE_ID = 'PI' OR per.PROP_PERSON_ROLE_ID = 'PD')
LEFT JOIN EPS_PROP_ABSTRACT abs
    ON eps.PROPOSAL_NUMBER = abs.PROPOSAL_NUMBER
LEFT JOIN NSF_CODES nsf
    ON eps.NSF_CODE = nsf.NSF_SEQUENCE_NUMBER
WHERE eps.OWNED_BY_UNIT = '401' AND eps.requested_start_date_initial >= DATE '2019-10-01';

这可行,但是您可以看到问题所在,对吧?我设置CASE语句的方式,当一个特定的PROPOSAL_NUMBER包含多个TRUE的ONR_Option时,将不会考虑它。

在上面给出的示例中,如果我搜索编号为1235的提案, ONR的结果应为-“选项1,选项2”。

如何使用LISTAGGCOALESCE解决这个难题?还是解决该问题的方法?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)