网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > 数据库 > Oracle教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
数据库:数据库教程,数据库技巧,Oracle教程,MySQL教程,Sybase教程,Access教程,DB2教程,数据库安全,数据库文摘
本月文章推荐
.个人经验总结:Oracle数据库SCN号.
.Infor收购16公司 称ORACLE错失最.
.sendmail中一种限定用户邮箱大小.
.Oracle蠕虫再次变异.
.Oracle错误案例:TNS-00510.
.ORACLE SQL性能优化系列(二).
.ORACLE中生成流水号.
.详细介绍:安装0racle 10g 的艰难.
.ORACLE中一些问题的解决方法.
.Oracle FAQ 之性能调整篇.
.索引性能优化实例.
.DB2与Oracle数据库之间的远程复制.
.如何才能在同一台机器配置两个li.
.Oracle的入门心得.
.Oracle进阶 LOB字段学习.
.Oracle使用ANYDATA列对数据串行化.
.监控谁在使用哪个回滚段的脚本.
.Oracle企业管理器使用指南.
.Oracle SQL语言.
.观察目前谁在使用RBS.

利用Oracle rownum完成行转列一例

发表日期:2008-2-9


    一、需求背景:     表A:CREATE TABLE T_SMCOMMONMSG (     FXH             NUMBER,     FTYPE           NUMBER,     FMSG_CONTENT  VARCHAR2(1024 BYTE)     )     表B:CREATE TABLE T_SMYL_COMMONSND (     FXH               NUMBER,     FMSG_CONTENT1  VARCHAR2(1024 BYTE),     FMSG_CONTENT2  VARCHAR2(1024 BYTE)     )     表A中的原始记录如下:     FXH     FTYPE   FMSG_CONTENT     ------  -------- --------------     98       0        msg1     99       0        msg2     100       0        msg3     101       0        msg4     表B中的现有记录如下:     FXH     FMSG_CONTENT1   FMSG_CONTENT2     ------- ---------------- --------------     1           空              空     2           空              空     需求:现要求将表A中的记录转换成如下格式的表B中的记录:     FXH     FMSG_CONTENT1   FMSG_CONTENT2   ------  ---------------- --------------     1          msg1           msg2     2          msg3           msg4     注:表A是一个包含了多种FTYPE类型的信息表,其中FTYPE=0的信息就是转换的原始信息,序号从98开始     表B是一个包含了一种FTYPE类型的信息表,其序号从1开始     二、解决方案:     1.尝试使用如下SQL语句: update t_smyl_commonsnd a      set a.fmsg_content1 = (select fmsg_content                                 from t_smcommonmsg b                              where b.ftype = 0                                 and mod(b.fxh,2) =0)
    错误原因:子查询的结果是一个结果集,不能将结果集赋給一条记录的某个字段     2.尝试使用如下SQL语句:     update t_smyl_commonsnd a       set a.fmsg_content1 = (select fmsg_content                                  from t_smcommonmsg b                             where b.ftype = 0                               and mod(b.fxh,2) =0                               and a.fxh = b.fxh -97)      但执行: select * from t_smyl_commonsnd;结果为:     FXH     FMSG_CONTENT1   FMSG_CONTEN2
    --------  --------------- --------------
    1                                       msg1
    2
    3           msg2
    4
    5           msg3     错误原因:子查询中对与表A中FXH值为偶数的记录,其返回值为NULL,所以偶数行的字段都为空     3.尝试使用如下SQL语句:     --更新字段:FMSG_CONTENT1     update t_smyl_commonsnd a       set a.fmsg_content1 = (select fmsg_content                               from (select rownum id, fmsg_content                                           from (select fmsg_content                                                  from t_smcommonmsg                                                 where ftype = 0                                                   and mod(fxh, 2) = 0                                                 order by fxh asc) v1                                              ) v2                                 Where a.fxh = v2.id);                --更新字段:FMSG_CONTENT2        update t_smyl_commonsnd a       set a.fmsg_content2 = (select fmsg_content                                from (select rownum id, fmsg_content                                          from (select fmsg_content                                                  from t_smcommonmsg                                                 where ftype = 0                                                   and mod(fxh, 2) = 1                                                 order by fxh asc) v1                                              ) v2                                 where a.fxh = v2.id);
    返回结果如下:     FXH   FMSG_CONTENT1   FMSG_CONTENT2 ----- --------------- ---------------     1       msg1              msg2     2       msg3              msg4     更新成功!     分析:     1)。 找出表A中所有FTYPE=0且FXH为双数的记录,也即是FMSG_CONTENT1字段的目标值 select fmsg_content                    from t_smcommonmsg               where ftype = 0                     and mod(fxh, 2) = 0                   order by fxh asc     2)。給筛选的结果加上Rownum,和表B中的记录一一对应                 select rownum id, fmsg_content                   from (select fmsg_content                             from t_smcommonmsg                           where ftype = 0                              and mod(fxh, 2) = 0                            order by fxh asc) v1
    3)。找出视图V1中ID值和表B的FXH号值对应的记录                 select fmsg_content                    from (select rownum id, fmsg_content                             from (select fmsg_content                                      from t_smcommonmsg                                     where ftype = 0                                       and mod(fxh, 2) = 0                                     order by fxh asc) v1                                    ) v2                  where a.fxh = v2.id     4)。更新记录的值:                 update t_smyl_commonsnd a                     set a.fmsg_content1 = (select fmsg_content                                                  from (select rownum id, fmsg_content                                                           from (select fmsg_content                                                                    from t_smcommonmsg                                                                   where ftype = 0                                                                     and mod(fxh, 2) = 0                                                                   order by fxh asc) v1                                                         ) v2                                                where a.fxh = v2.id);
    Trackback: http://tb.blog.csdn.net/TrackBack.ASPx?PostId=1476118
上一篇:ORACLE中的日志值转换成time_t 人气:1392
下一篇:10gRAC系列之cluvfy用法及验证错误解决 人气:720
浏览全部Oracle教程的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐