如何在Oracle中创建查询以获取逗号分隔格式的多行数据

时间:2019-05-08 04:28:13

标签: sql oracle

我有一个要求,我在数据库表POLICY中有“ NOTECODE”列,其中包含多个逗号分隔格式的注释代码 例如:CC,TD,HL

政策:

 POLICYNO  | NOTECODE
 ----------|----------
 ABC001    | CC,TD,HL
 ----------|----------
 ABC002    | CC,TD

还有一个CODEDESC表,其中包含以下说明

 CODE  | DESCRIPTION
 ------|----------
 CC    | Credit Card Payment
 ------|----------
 TD    | Yee
 ------|--------------
 HL    |Hospital Credit (Letter)

我想使用查询来获取数据,该查询给出了如下所述的POLICYNO,NOTECODE和DESCRIPTION:

 POLICYNO  | NOTECODE   | DESCRIPTION
 ----------|----------  |----------
 ABC001    | CC,TD,HL   | Credit Card Payment, Yee, Hospital Credit (Letter)
 ----------|----------  |----------
 ABC002    | CC,TD      | Credit Card Payment, Yee  

请有人帮我怎么做。

1 个答案:

答案 0 :(得分:0)

您可以使用JOIN和聚合:

select p.policyno, p.notecode,
       listagg(description, ', ') within group (order by instr(p.notecode, cd.code))
from policy p left join
     codedesc cd
     on ',' || p.notecode || ',' like '%,' || cd.code || ',%'
group by p.policyno, p.notecode;

请注意,这效率不高!这是一种变通方法,因为您陷入了一个非常糟糕的数据模型中。您的努力实际上应该是修复数据模型。