66,607
社区成员




问题:在excel表中有数据需要转换,故想用数据库来操作,实现转换,101 ,103 ,105 转换对应编码名称,语文,英语,生物。因每行存放的数据不一致,无法查找替换。
有表A1,结构如下,a_id,a_name varchar, 存放数据如下:101 语文,102 数学,103 英语,104 化学, 105 生物, 106 物理,有业务表B1,结构如下,s_id,s_name,s_km,s_age 存放数据如下:101001 张三 102,103,106 18 ; 1010012 李四 106,101,104,102,20;需求是把业务表中的s_km转换成字典对应的名称,如101001 张三 数学,英语,物理 18; 1010012 李四 物理,语文,化学,数学,20;请教一下各位,感谢啦!
您可以使用SQL的JOIN语句来实现这个转换。
首先,您需要创建一个连接表A1和B1的查询,然后使用CASE语句或者DECODE函数来将s_km中的编码转换为对应的名称。这里是一个使用DECODE函数的示例:
SELECT b.s_id,
b.s_name,
LISTAGG(a.a_name, ',') WITHIN GROUP (ORDER BY a.a_id) AS subjects,
b.s_age
FROM B1 b
CROSS JOIN A1 a
WHERE ',' || b.s_km || ',' LIKE '%,' || a.a_id || ',%'
GROUP BY b.s_id, b.s_name, b.s_age;
这个查询会将B1表中的s_km字段中的每个编码与A1表中的a_id字段进行匹配,并将匹配的a_name字段值聚合起来。LISTAGG函数用于将聚合的结果以逗号分隔的形式返回。