用wm_concat合并行及merge into更新

转载 2015年11月20日 15:45:09

已知需求:

kmb结构:
as_code varchar2(21),
as_name varchar2(30)
样例数据:(as_code列的编码是规则的,即3-3-3-3)
as_code     as_name
501         经费支出
501001      商品服务支出
501001001   办公费
501001001001  其他杂项支出

pzb结构:
as_code varchar2(21),
full_name varchar2(200)
样例数据
as_code               as_name
501              
501001
501001001
501001001001

现编写sql实现如下功能:
更新pzb的as_name列,使名称按全称显示即:
as_code       full_name
501           经费支出
501001        经费支出-商品服务支出
501001001     经费支出-商品服务支出-办公费
501001001001  经费支出-商品服务支出-办公费-其他杂项支出

--造表及数据
create table kmb(
as_code varchar2(21) CONSTRAINT kmb_pk PRIMARY KEY,
as_name varchar2(30)) ;

create table pzb(
as_code varchar2(21) CONSTRAINT pzb_fk_kmb REFERENCES kmb(as_code),
full_name varchar2(200));

insert into kmb(as_code, as_name) values('501','经费支出');
insert into kmb(as_code, as_name) values('501001','商品服务支出');
insert into kmb(as_code, as_name) values('501001001','办公费');
insert into kmb(as_code, as_name) values('501001001001','其他杂项支出');
insert into pzb(as_code) select as_code from kmb;
commit;

SQL> select * from kmb;

AS_CODE               AS_NAME
--------------------- ------------------------------
501                           经费支出
501001                    商品服务支出
501001001              办公费
501001001001       其他杂项支出

SQL> select * from pzb;

AS_CODE               FULL_NAME
--------------------- ------------------------------
501                  
501001               
501001001            
501001001001         

--实现:oracle提供了一个函数wm_concat函数可以合并列,利用此函数将表kmb中同一个大类的as_name的不同列按顺序合并成一行,wm_concat默认连接字符为',',可用replace将其转换成'-'以符合需求,这样即可得出最细分类的串。最后按条件取结果集用merge into更新pzb表的full_name字段。脚本如下:
SQL> merge into pzb p
  2  using (
  3  select p.as_code as_code, substr(a.wm, 1, instr(a.wm, '-', 1, length(p.as_code)/3)-1) full_name
  4         from kmb p,
  5   (select as_code, replace(wm, ',','-')||'-' wm from
  6     (select min(as_code) as_code, wm_concat(as_name) wm from kmb where 1=1 group by substr(as_code,1,3)))a
  7          where substr(p.as_code,1,3)=a.as_code)a
  8  on (p.as_code=a.as_code)
  9  when matched then
 10  update set full_name=a.full_name;
 
SQL> commit;
SQL> select * from pzb;

AS_CODE                 FULL_NAME
---------------------     ------------------------------------------
501                              经费支出
501001                       经费支出-商品服务支出
501001001                 经费支出-商品服务支出-办公费
501001001001          经费支出-商品服务支出-办公费-其他杂项支出

oracle wm_concat(column)函数的使用 多行数据合并成一列

oracle wm_concat(column)函数使我们经常会使用到的,下面就教您如何使用oraclewm_concat(column)函数实现字段合并,如果您对oracle wm_concat(c...
  • u010150082
  • u010150082
  • 2015年08月31日 16:07
  • 975

Oracle合并多列到一行wm_concat

Oracle合并多列到一行wm_concat   Oracle在group by后合并表的某一列,以逗号隔开  或者合并整个表中的一列   www.2cto.com   函数为wm_conca...
  • pzasdq
  • pzasdq
  • 2015年12月23日 20:12
  • 974

ExtJs grid合并单元格

extjs中,如果要输出一些有合并单元格的表格,要怎么做呢?如图所示:从网上找了个例子,其主要思想是表格的store装载完毕后,随即对这个grid的td进行一个个的控制,用的方法也是原始的javasc...
  • leftfist
  • leftfist
  • 2015年04月29日 21:56
  • 3821

Oracle 11g merge into log error及并行注意事项

最近有一个业务使用merge into报主键冲突的错误。各地市将数据汇总到省,省的数据是按照局编码分区,由于不同的地市,有主键相同的数据,应该是垃圾数据。 --初始化数据 drop table T_L...
  • guogang83
  • guogang83
  • 2017年01月09日 17:32
  • 961

Oracle数据库合并行记录,WMSYS.WM_CONCAT 函數的用法

Sql代码   select t.rank, t.Name from t_menu_item t;         10 CLARK     10 KING     10...
  • huyunfei
  • huyunfei
  • 2015年05月19日 10:34
  • 1266

EasyUI-DataGrid多行动态选择性合并算法实现

jQuery EasyUI中有一个很好用的数据列表控件,即DataGrid控件,后台以一定的json格式传给控件就能在前台展示出来,功能很强大,不过有时需求需要这样即多行合并,如在列表中如果相同的部门...
  • chenleixing
  • chenleixing
  • 2015年03月12日 23:03
  • 13950

MERGE 更新表数据

;WITH TempData AS ( SELECT 字段 FROM 来源表(可选) ) MERGE 目标表 AS target USING TempData AS source ON ...
  • qq_24443361
  • qq_24443361
  • 2015年06月04日 14:50
  • 176

将git的变更merge到svn或将svn的变更merge到git.

今天遇到个问题,项目使用SVN做版本控制,但是里面用了一个开源项目是放在github上的,本地做了自定义修改。后来开源项目发了新版本,我们项目要升级的时候遇到了问题。由于版本控制信息已经不是一个bas...
  • u013411478
  • u013411478
  • 2014年07月31日 11:42
  • 1220

ROWID更新提升UPDATE性能,不能用merge时

declare   maxrows      number default 100000;   row_id_table dbms_sql.urowid_table;   --currcount...
  • lovebiau
  • lovebiau
  • 2015年03月19日 16:53
  • 186

分享一下jqgrid合并单元格

原文:http://bbs.blueidea.com/thread-3067461-1-1.html Merger这个方法大家可以直接调用 里边都不用修改  参数1为jqgrid的id  参...
  • wd4java
  • wd4java
  • 2017年01月03日 10:08
  • 5320
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:用wm_concat合并行及merge into更新
举报原因:
原因补充:

(最多只允许输入30个字)