oracle数据库关于行转列函数的用法

工作中,我们常常遇到SQL查询中,需要结果进行行转列的操作,那如何使用呢?我们这里讲讲一下oracle中WMSYS.WM_CONCAT 用法的用法!

工作中,我们常常遇到SQL查询中,需要结果进行行转列的操作,那如何使用呢?我们这里讲讲一下oracle中WMSYS.WM_CONCAT 等函数的用法!

方法一:使用 WMSYS.WM_CONCAT

首先准备一下测试数据,新建一张测试表

CREATE TABLE 测试表 (ID INTEGER NOT NULL,公司名 VARCHAR2(20),姓名 VARCHAR2(20));
INSERT INTO 测试表(ID,公司名,姓名) VALUES (1,'总公司','张三');
INSERT INTO 测试表(ID,公司名,姓名) VALUES (2,'销售分公司','李四');
INSERT INTO 测试表(ID,公司名,姓名) VALUES (3,'仓库分公司','王五');
INSERT INTO 测试表(ID,公司名,姓名) VALUES (4,'销售分公司','赵六');
INSERT INTO 测试表(ID,公司名,姓名) VALUES (5,'总公司','张龙');
INSERT INTO 测试表(ID,公司名,姓名) VALUES (6,'销售分公司','赵虎');
INSERT INTO 测试表(ID,公司名,姓名) VALUES (7,'仓库分公司','王朝');
COMMIT;
oracle数据库关于行转列函数的用法

这里我们测试将公司名合并,后面附上每个公司的员工名称

select 公司名,wmsys.wm_concat(姓名) as 单位员工 from 测试表
group by 公司名
oracle数据库关于行转列函数的用法

方法2:使用sys_connect_by_path函数

直接上SQL语句

select id, 公司名, ltrim(max(sys_connect_by_path(姓名, ',')), ',')  as 单位员工  from  
(select row_number() over(PARTITION by 测试表.公司名 ORDER by 公司名) r,测试表.* from 测试表)
start with r=1 CONNECT by prior r =r-1 and prior id = id 
group by id ,公司名 
order by id;
oracle数据库关于行转列函数的用法
0 条回复 A 作者 M 管理员
    所有的伟大,都源于一个勇敢的开始!
欢迎您,新朋友,感谢参与互动!欢迎您 {{author}},您在本站有{{commentsCount}}条评论