Oracle简化数据表格:实现两行合并为一行(Oracle两行并一行)

Oracle数据库经常会遇到一些复杂的表结构,这就需要把表格中的多行转晰为一行。下面就介绍如何使用Oracle实现将二行合并为一行的函数。

首先,定义一个模拟表t1。

“` sql

/**********Oracle 模拟表*********/

CREATE TABLE t1

(

id NUMBER,

emp_name VARCHAR2 (20),

emp_desc VARCHAR2 (100),

dept_name VARCHAR2 (20)

);

插入模拟数据: 
``` sql
/**********Oracle 插入数据*********/
INSERT INTO t1 VALUES (1,'张三','员工','技术部');
INSERT INTO t1 VALUES (2,'李四','员工','财务部');
INSERT INTO t1 VALUES (3,'王五','经理','销售部');

接下来,定义两个函数来实现将二行合并为一行:

“` sql

/**********Oracle 两行合并为一行函数*********/

CREATE OR REPLACE FUNCTION fn_concat_rownum

(

p_rownum1 VARCHAR2,

p_rownum2 VARCHAR2

)

RETURN VARCHAR2

IS

v_name VARCHAR2 (100):= ”;

BEGIN

SELECT

Listagg

(

t1.emp_name,

‘,’

) WITHIN GROUP

(

ORDER BY t1.id

)

INTO v_name

FROM t1

WHERE Rownum IN (p_rownum1, p_rownum2);

RETURN v_name;

END fn_concat_rownum;

CREATE OR REPLACE FUNCTION fn_concat_dept

(

p_rownum1 VARCHAR2,

p_rownum2 VARCHAR2

)

RETURN VARCHAR2

IS

v_dept VARCHAR2 (100):= ”;

BEGIN

SELECT

Listagg

(

t1.dept_name,

‘,’

) WITHIN GROUP

(

ORDER BY t1.id

)

INTO v_dept

FROM t1

WHERE Rownum IN (p_rownum1, p_rownum2);

RETURN v_dept;

END fn_concat_dept;


最后,使用select查询,将二行合并为一行。
``` sql
/**********Oracle 二行合并为一行*********/
SELECT
Rownum AS id,
fn_concat_rownum (1,2) AS emp_name_list,
fn_concat_dept (1,2) AS emp_dept_list
FROM dual;

运行结果如下图:

![运行结果](img/1.png)

从结果可以看出,通过定义两个函数,使用select查询成功实现了将表格中的多行转换为一行。通过简单的函数设计,Oracle可以非常方便地把表格中的多行转换为一行,提高开发效率,减少编码量。


数据运维技术 » Oracle简化数据表格:实现两行合并为一行(Oracle两行并一行)