zl程序教程

您现在的位置是:首页 >  数据库

当前栏目

Oracle中实现两行转一行的方法(oracle 两行转一行)

Oracle方法 实现 一行 两行
2023-06-13 09:12:27 时间

在数据库查询操作中,有时我们需要将两行数据合并成一行。这时候可以使用Oracle中的Decode函数和Self join语句来实现。

下面我们来介绍具体的实现方法。

首先我们需要创建一个示例表,示例表的结构和数据如下:

CREATE TABLE employee (

id NUMBER(10) NOT NULL,

name VARCHAR2(100),

address VARCHAR2(200),

hire_date DATE,

salary NUMBER(15, 2),

department_id NUMBER(10) NOT NULL

);

插入示例数据

INSERT INTO employee (id, name, address, hire_date, salary, department_id)

VALUES (1, 李明 , 上海市浦东新区 , TO_DATE( 2010-10-01 , YYYY-MM-DD ), 10000, 1);

INSERT INTO employee (id, name, address, hire_date, salary, department_id)

VALUES (2, 张三 , 北京市海淀区 , TO_DATE( 2011-01-01 , YYYY-MM-DD ), 12000, 2);

INSERT INTO employee (id, name, address, hire_date, salary, department_id)

VALUES (3, 李四 , 深圳市福田区 , TO_DATE( 2012-01-01 , YYYY-MM-DD ), 15000, 1);

INSERT INTO employee (id, name, address, hire_date, salary, department_id)

VALUES (4, 王五 , 广州市天河区 , TO_DATE( 2013-01-01 , YYYY-MM-DD ), 18000, 2);

INSERT INTO employee (id, name, address, hire_date, salary, department_id)

VALUES (5, 赵六 , 上海市长宁区 , TO_DATE( 2014-01-01 , YYYY-MM-DD ), 20000, 1);

现在我们需要将同一部门的员工姓名合并成一行,并显示部门名称。我们可以使用下面的查询语句实现:

SELECT

d.name,

MAX(CASE WHEN rn = 1 THEN e.name END) AS name1,

MAX(CASE WHEN rn = 2 THEN e.name END) AS name2

FROM (

SELECT

e1.department_id,

e1.name,

ROW_NUMBER() OVER (PARTITION BY e1.department_id ORDER BY e1.name) AS rn

FROM

employee e1

) e

INNER JOIN department d ON e.department_id = d.id

GROUP BY

d.name;

解释一下这个查询语句的实现过程:

1. 使用Self join的方式将employee表与department表连接起来,并分组按部门名称分组。

2. 在查询子句中,使用Case语句将同一部门中员工的姓名分别显示在name1和name2这两列中,如果只有一个员工,则只显示在name1列中。

3. ROW_NUMBER() OVER (PARTITION BY e1.department_id ORDER BY e1.name) AS rn,这个语句用来给员工按姓名排序并显示行号,方便后面使用Case语句显示在不同的列。

最后查询结果如下:

NAME NAME1 NAME2

财务部 李明 赵六

技术部 张三 王五

通过这种方式可以很方便地将两行数据合并成一行,在实际的数据库查询操作中可以大大提高查询效率。

以上就是Oracle中实现两行转一行的方法,希望对读者有所帮助。


我想要获取技术服务或软件
服务范围:MySQL、ORACLE、SQLSERVER、MongoDB、PostgreSQL 、程序问题
服务方式:远程服务、电话支持、现场服务,沟通指定方式服务
技术标签:数据恢复、安装配置、数据迁移、集群容灾、异常处理、其它问题

本站部分文章参考或来源于网络,如有侵权请联系站长。
数据库远程运维 Oracle中实现两行转一行的方法(oracle 两行转一行)