网创优客建站品牌官网
为成都网站建设公司企业提供高品质网站建设
热线:028-86922220
成都专业网站建设公司

定制建站费用3500元

符合中小企业对网站设计、功能常规化式的企业展示型网站建设

成都品牌网站建设

品牌网站建设费用6000元

本套餐主要针对企业品牌型网站、中高端设计、前端互动体验...

成都商城网站建设

商城网站建设费用8000元

商城网站建设因基本功能的需求不同费用上面也有很大的差别...

成都微信网站建设

手机微信网站建站3000元

手机微信网站开发、微信官网、微信商城网站...

建站知识

当前位置:首页 > 建站知识

oracle怎么样列转行 oracle中行转列

oracle列转行、列转行

SELECT REGEXP_SUBSTR('aa,bbb,cccc', '[^,]+', 1, rownum)

十余年的延吉网站建设经验,针对设计、前端、开发、售后、文案、推广等六对一服务,响应快,48小时及时工作处理。全网整合营销推广的优势是能够根据用户设备显示端的尺寸不同,自动调整延吉建站的显示方式,使网站能够适用不同显示终端,在浏览器中调整网站的宽度,无论在任何一种浏览器上浏览网站,都能展现优雅布局与设计,从而大程度地提升浏览体验。创新互联公司从事“延吉网站设计”,“延吉网站推广”以来,每个客户项目都认真落实执行。

from dual 

connect by level = LENGTH(regexp_replace('aa,bbb,cccc', '[^,]+', ''));

with baseData as(

select '1' id,'aaa' name from dual

union all

select '2' ,'bbb' from dual

)

SELECT listagg(name ,',') WITHIN GROUP (ORDER BY id)

FROM  baseData ;

oracle列转行

INSERT INTO 新表 (SELECT ID, '呼吸系统疾病' FROM 原表 WHERE 呼吸系统疾病有无 = 1 UNION SELECT ID, '消化系统疾病' FROM 原表 WHERE 消化系统疾病有无 = 1

UNION SELECT ID, '循环系统疾病' FROM 原表 WHERE 循环系统疾病有无 = 1)

如果使用行转列,还得使用merge into,还不如上面的语句清晰。

Oracle列转行函数vm_concat在19C版本不兼容解决方案

  本文记录一下Oracle列转行函数在Oracle11的一些不兼容问题,vm_concat在一些业务场景是必须的。不过这个函数使用要谨慎,底层实现应该也是group by等等实现的,性能并不是特别好。这个函数在Oracle12C是没有的,在Oracle11是不太兼容的,Oracle10可以正常使用。最近开发场景遇到这个问题,可以写到了自定义列转行函数的办法去解决。但是这种办法并不一定适用所有的业务场景。

解决方案

    通过自定义函数解决也是可以的,不过我并不是这样做的。 下面介绍一下我的解决方法。首先分析一下,Oracle19C不兼容vm_concat列转行函数,并不代表其它函数不兼容,或许可以找到其它代替的,通过找资料,发现了Oracle11提供的另外一个函数:listagg()函数 语法:listagg(参数,‘分隔符’) within group(order by 参数id),验证可以实现在19C正常使用

例如:

to_char(wm_concat(t.busi_id))

可以改写成:

to_char(listagg(t.busi_id,',' ) within GROUP (order by (t.busi_id)))

SQL如:

SELECT listagg(t.busi_id, ',') within GROUP(order by (t.busi_id))

FROM sys_cdc_sync_record t

WHERE cdc_sql_type = 'INSERT_SELECT'

Oracle中列转行,如何实现?

基本思路:对每班学生排序,根据序号构造列名,拼接动态sql

--测试数据

create table

("学生" varchar2(10)

,"学号" varchar2(10)

,"班级" varchar2(10)

); 

insert into "表A" 

select '张三','100','一班' from dual union all

select '李四','101','二班' from dual union all

select '王五','102','一班' from dual union all

select '赵六','103','三班' from dual union all

select '李二','104','二班' from dual

--动态拼接Pivot  

declare

sqlstr varchar2(8000):='';

begin

--构造类似于 '学号1','学号2',...  的字符串

for x in (     

select distinct row_number() over (partition by "班级" order by "学号") seq 

from "表A" order by seq ) loop 

sqlstr := sqlstr || ',''' || '学号' ||to_char(x.seq)||''''; 

end loop; 

sqlstr:=substr(sqlstr,2,length(sqlstr)-1);

--将前面构造的字符串放入Pivot语句中

sqlstr:='

select * from (

select "学号","班级", ''学号''|| to_char(

row_number() over (partition by "班级" order by "学号")) seq  

from "表A") t

pivot(

max("学号")

for seq in ('||sqlstr||')  

)';

--dbms_output.put_line(sqlstr);

--将查询结果放入临时视图中

sqlstr := 'CREATE OR REPLACE VIEW tmp_result  AS '|| sqlstr;

--dbms_output.put_line(sqlstr);

execute immediate sqlstr;

end;

--查看结果

select * from tmp_result;

结果如下:


本文名称:oracle怎么样列转行 oracle中行转列
网页地址:http://bjjierui.cn/article/hpghsd.html

其他资讯