怎样用字典表的数据替换另一个表中某个字段的值?

name506 2013-03-04 04:28:48
现有 字典表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语句该怎样写呀?



谢谢大家

...全文
942 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
name506 2013-03-14
  • 打赏
  • 举报
回复
搞定了,谢谢
name506 2013-03-11
  • 打赏
  • 举报
回复
谢谢大家。我试试
kingkingzhu 2013-03-11
  • 打赏
  • 举报
回复
搞的好复杂啊 写个函数查询代码对应的值 带入user表查询下就出来的
「已注销」 2013-03-06
  • 打赏
  • 举报
回复
其中最重要的是“用户表 user”的分割问题 1) 先看一下字典表的最大数据(如果大的话放弃这个方法),按字典表一个一个分割后用union all 连起来

select id, substr(qx || ',', 1, instr(qx || ',', ',') - 1)
  from user
union all
select id,
       substr(replace(qx || ',',
                      substr(qx || ',', 1, instr(qx || ',', ',')),
                      ''),
              1,
              instr(replace(qx || ',',
                            substr(qx || ',', 1, instr(qx || ',', ',')),
                            ''),
                    ',') - 1)
  from user
union all
...
;
2)自定义函数分割,这个楼上几位已经有答案了。
littlearac 2013-03-06
  • 打赏
  • 举报
回复
很不错哦 ,我也在学习Oracle 希望有所帮助
quiettown 2013-03-05
  • 打赏
  • 举报
回复

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  
        v_typeid := substr(v_instr, 1, 
            case when instr(v_instr, ',') > 0 then instr(v_instr, ',') - 1 else length(v_instr) end);  
        
        begin
            select nvl(nr, 'unknow') into v_typename
              from tba
             where dm = v_typeid;
        exception
            when no_data_found then
                v_typename := 'unknow'; 
        end;            
        
        v_result := v_result || v_typename || ',';
        exit when instr(v_instr, ',') = 0 or v_instr is null;        
        
        v_instr  := substr(v_instr, instr(v_instr, ',') + 1); 
        
    end loop;
       
    v_result := substr(v_result, 1, length(v_result) - 1);
    return(v_result);
    
end fn_convertcode;
hupeng213 2013-03-05
  • 打赏
  • 举报
回复
分两步 --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再把字段重新拼回来。
iqlife 2013-03-05
  • 打赏
  • 举报
回复
善若止水 2013-03-04
  • 打赏
  • 举报
回复
首先判断的逗号的个数,然后依据逗号逐段的截取字符,然后与码表关联。
name506 2013-03-04
  • 打赏
  • 举报
回复
引用 1 楼 quiettown 的回复:
不好做,如果字典中的数据不确定,不能使用系统函数,还是自已写个函数实现吧。。。
应该咋写呀
quiettown 2013-03-04
  • 打赏
  • 举报
回复
不好做,如果字典中的数据不确定,不能使用系统函数,还是自已写个函数实现吧。。。
MIP2000XP是什么? (1)MIP2000XP是一套数据库软件 (2)MIP2000XP是一套“傻瓜型”MIS开发工具 (3)MIP2000XP是一套开放的数据库管理平台 (4)MIP2000XP是一套面向最终用户的管理信息系统解决方案 MIP2000XP是一套运行在Win9X/ME/NT/2K/XP上的通用数据库管理平台,她以数据为处理中心,实现在统一平台下对关系型数据库的数据进行全面管理。面向管理人员设计、无须编程的特点,是中小企事业单位信息化建设的一个理想工具。 MIP2000XP特点: “傻瓜”性 面向业务人员,无须学习复杂的程序设计语言,无须关心程序设计细节,无需要专业的编程知识,只需仔细分析需求,以简单的定义即可快速生成满足用户自己需要的管理信息系统。 多平台 系统可以运行在流行的多种操作系统平台上,如Windows 9X/NT/ME/2000/XP等。 开放性 系统对数据库管理系统具有彻底的开放性,即不再针对某个特定的数据库,不是基于某个特定的数据库开发的,而是满足各种用户使用各种数据库的需求。可与已有的管理系统进行集成,来解决信息系统建设面临的“信息孤岛”问题。 实用性 系统围绕数据处理为核心,实现了如录入、删除、复制、移动、查询、定位、替换、排序、统计、汇总、查重、输出、打印报、修改更新等数据库管理功能,最大限度地满足用户对数据处理的各种要求。 安全性 系统提供良好的安全可靠性策略,提供的用户管理、数据窗体的使用授权,以及记录级和字段数据使用授权机制,保证数据的共享及安全。 灵活性 (1)数据字典:系统提高了一个开放的数据字典,用户可根据需求对数据字典字段内容定义,实现对数据窗体数据的约束。 (2)动态数据:用户可自定义多种格式的数据进行打印预览和打印输出。 (3)Word、Excel模板:系统提供的与Word和Excel模板的访问接口,实现用户处理特殊报和格式文件的需求,如公文、发票、信封等特殊输出格式的套打。 易用性 系统具有简单、直观、方便的用户界面,给管理者、一般工作人员提供了一个易学、易懂、易用的系统。图形界面和多文挡的MDI窗口,对用户更友好。 -------------------------------------------------------------------------------- MIP2000XP主要功能: 人性化的录入界面设计:功能强大的数据窗体设计功能可以设计出人性化的数据窗体录入界面。 丰富的字段类型:支持包括自动、字符、整数、实数、日期、逻辑、货币、文本(Memo)、图像和OLE等多种类型字段。 强大的数据管理:数据窗体包括对数据库主要操作有添加、更新、删除、导入、导出、复制、定位、替换、移动、查询、报、统计和打印等等。 多级用户及权限管理:提供了三级用户管理机制,即系统用户、普通用户和共享用户。根据需要,系统可实现对数据窗体使用(允许访问、允许读、允许写)权限的动态分配。用户对记录的授权访问可定义到用户或用户组。 万能的数据查询:根据用户定义的检索条件(单条件和复合条件),实现精确、模糊、包含、非包含等多种查询。 动态的数据统计:动态数据统计功能,统计范围可以是求最大、最小、求和、平均和计数,能对分类字段进行汇总统计,汇总的结果以直方图、饼图 、点、快速线、和甘特图等11种显示风格现出来,同时支持对图形的打印输出。 灵活的报打印:动态数据。支持自定义的数据窗体的打印和打印预览,实现对数据格打印字段的定义,并支持多种风格的报输出。 方便的Word和Excel接口:提供与Word和Excel的访问接口,通过Word模板和Excel模板定义,来生成一些指定的报格式文件。实现如公文、发票、信封等格式文件的套打功能。 强大的数据导出:支持数据到Word、Excel、文本、格文本、.DBF、HTML等多种形式的数据格式文件转换。 完善的系统日志:记录用户对系统的一些主要操作,如登录和退出系统的时间,建立和删除数据窗体,更改口令,定义数据字典等主要操作。 友好的在线用户显示:显示系统中当前在线用户和离线的用户情况,显示内容包括在线用户名称,登录机器的用户名,登录时间,登录次数, 离线的用户以及最后一次访问系统的时间等信息。 实用的数据查重:从数据(单个或两个)中找出重复的数据记录。 灵活的数据转换:实现不同关系型数据库间数据的移植和数据之间的数据转换。 快速的数据到Web发布:将数据内容生成HTML文件或将生成到特定的Web模板中。 个性化定义:用户可以在管理平台上设置自己喜欢的显示风格。设置的内容包括窗体分类、启动界面、登录风格、系统风格、系统背景等信息。 灵活方便的数据字典:开放的数据字典,体现系统的灵活性。用户可根据需求对数据字典的内容定义,实现对数据窗体数据的约束。可定义的内容包括字段的中文解释、能否为空、是否是唯一、自动赋字段范围设置等进行设置。 详细内容请访问:www.mip200xp.net

17,382

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧