专业编程教程与实战项目分享平台

网站首页 > 技术文章 正文

Oracle列转行、多列转成一行_oracle列转行listagg

ins518 2025-08-21 03:07:34 技术文章 2 ℃ 0 评论

列转行实验:

create table score2(

name varchar2(10),

Language number(3),

Math number(3),

English number(3)

);

insert into

score2 values('Zhang',80,67,95);

insert into score2 values('Li',79,84,62);

insert into score2(name,Language) values('Chen',88);

commit;


SELECT name,

'Language' subject,Language grade FROM score2

UNION ALL

SELECT name, 'Math' subject,Math grade FROM score2

UNION ALL

SELECT name, 'English' subject,English grade FROM score2

order by name;

多列转成一行 实验:

drop table t purge;

create table t(

dname varchar2(10),

ename varchar2(10)

);

insert into t values('sales','Scott');

insert into t values('sales','Jimes');

insert into t values('sales','Jack');

insert into t values('account','John');

insert into t values('account','Marry');

insert into t values('hr','Smith');

commit;


方法一:

select dname,WMSYS.WM_CONCAT(ename) ename from t group by dname;

方法二:

SELECT dname, SUBSTR(MAX (SYS_CONNECT_BY_PATH (ename, ',')), 2) NAME

FROM (

SELECT dname, ename, rn, LEAD (rn) OVER (PARTITION BY dname ORDER BY rn) rn1

FROM (SELECT dname, ename, ROW_NUMBER () OVER (ORDER BY ename) rn

FROM t)

)

START WITH rn1 IS NULL

CONNECT BY rn1 = PRIOR rn

GROUP BY dname;

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表