怎样用字典表的数据替换另一个表中某个字段的值?
现有 字典表tba
字段如下
dm nr
01 新增
02 修改
03 统计
04 XX
05 aaa
06 ...
用户表 user (字段qx对应 字典表tba的dm,每个id可以有多个功能,用逗号分隔 )
id qx
admin 功能1,功能2,功能3
001 01
002 01,02
003 01,03
004 05
现在想显示这样的效果 (把qx地段里的代码替换成 字段表tba里的nr)
admin 新增,修改,统计
001 新增
002 新增,修改
003 新增,统计
004 aaa
这个sql语句该怎样写呀?
谢谢大家
sql
替换
字典
oracle
字段
------解决方案--------------------不好做,如果字典中的数据不确定,不能使用系统函数,还是自已写个函数实现吧。。。
------解决方案--------------------首先判断的逗号的个数,然后依据逗号逐段的截取字符,然后与码表关联。
------解决方案--------------------原理相同的做法,参照
http://blog.csdn.net/java3344520/article/details/5731758
------解决方案--------------------分两步
--1、单行字段拆分为多行,下面只是给个以前的例子
with t1 as
(
select '张三' c1,'胸外科,皮肤科' c2,date'2000-11-19' c3 from dual
union all
select '李四','胸外科',date'2001-01-04' from dual
union all
select '王五','妇产科,骨科',date'2001-01-08' from dual
)
select c1,
substr(','
------解决方案--------------------c2
------解决方案--------------------',',instr(','
------解决方案--------------------c2,',',1,b.rn)+1,
instr(c2
------解决方案--------------------',',',',1,b.rn)-instr(','
------解决方案--------------------c2,',',1,b.rn)) c2,c3
from t1,
(select rownum rn from t1
connect by rownum<10
--connect by rownum < nvl(length(regexp_replace(c2,'[^,]')),0)
) b
where length(c2)-length(replace(c2,','))+1>=b.rn
order by c1,b.rn
--10这个常量也可以改为读取字段中信息:nvl(length(regexp_replace(c2,'[^,]')),0)
--2、拆分的结果与字典表联立查询,这个你应该会吧
--3、The Oracle WM_CONCAT Function,WM_CONCAT再把字段重新拼回来。
------解决方案--------------------
create or replace function fn_convertcode(
p_instr in varchar2
) return varchar2 is
v_instr varchar2(100);
v_typeid varchar2(10);
v_typename varchar2(100);
v_result varchar2(100);
begin
v_instr := p_instr;
v_result := '';
loop