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可以非常方便地把表格中的多行转换为一行,提高开发效率,减少编码量。