我有一个varchar列test_data,表格temp_table1中有csv格式的数据。 示例数据>
,1,2,3,
,14,18,
,3,4,
对于每个数字,有一个映射字符串,如1 =“ABC”,2 =“XYX”,3 =“PQR”,另一个 数据库映射表temp_table2
有没有办法通过使用a替换每个数字及其映射来显示数据 单个SQL查询??
例如:**,1,2,3**, as **ABC,XYZ,PQR**
我尝试过使用decode,regexp_replace但无法找到解决方案。
数据库:Oracle 11g。
答案 0 :(得分:1)
有一种方法可以做到这一点,虽然有点难过。如果您对此有任何控制权,那么您真的应该使用联结表并修复数据库结构。
该方法是使用低效连接扩展数据,然后使用listagg()
将结果重新组合在一起。结果是这样的:
select td.id, listagg(tt.val, ',') within group (order by td.id)
from test_data td left join
temp_table2 tt
on td.col like '%,' || tt.col || '%,'
group by td.id;