Oracle合并两行到一行的技巧(oracle 两行变一行)

Oracle合并两行到一行的技巧

在Oracle数据库中,有时候我们需要将两行数据合并成一行,这时候就需要使用合并技巧。本文将为大家介绍使用Oracle SQL语句实现合并两行数据到一行的方法。

1.使用自连接查询

我们可以自连接同一张表,然后使用WHERE子句将两个不同的行合并成一行。

例如,有一个员工表,其中包含员工的ID、姓名、部门和薪水信息。我们要将不同时间段内的薪水数据合并为一行,可以使用以下SQL语句实现:

SELECT e1.employee_id,
e1.employee_name,
e1.department,
e1.salary AS salary_1,
e2.salary AS salary_2
FROM employee e1
JOIN employee e2
ON e1.employee_id = e2.employee_id
AND e1.salary e2.salary;

2.使用MAX和CASE语句

我们可以使用MAX和CASE语句将两个不同的行合并成一行。

例如,有一个订单表,其中包含订单号、客户ID、订单日期和订单状态信息。我们要将同一个客户的不同状态的订单日期信息合并为一行,可以使用以下SQL语句实现:

SELECT customer_id,
MAX(CASE WHEN status = '新订单' THEN order_date ELSE NULL END) AS new_order_date,
MAX(CASE WHEN status = '已发货' THEN order_date ELSE NULL END) AS ship_date,
MAX(CASE WHEN status = '已付款' THEN order_date ELSE NULL END) AS pd_date
FROM orders
GROUP BY customer_id;

3.使用UNION ALL

我们可以使用UNION ALL将两个不同的行合并成一行。

例如,有一个学生表,其中包含学生的ID、姓名、性别和语文成绩和数学成绩信息。我们要将同一个学生的语文和数学成绩信息合并为一行,可以使用以下SQL语句实现:

SELECT student_id,
name,
gender,
SUM(CASE WHEN subject = '语文' THEN score ELSE 0 END) AS Chinese,
SUM(CASE WHEN subject = '数学' THEN score ELSE 0 END) AS Math
FROM (
SELECT student_id,
name,
gender,
'语文' AS subject,
chinese_score AS Score
FROM students
UNION ALL
SELECT student_id,
name,
gender,
'数学' AS subject,
math_score AS score
FROM students
)
GROUP BY student_id,
name,
gender;

通过以上三种方法,我们可以很方便地将不同的行数据合并为一行。根据实际需求,选择合适的方法应用到具体的场景中即可。


数据运维技术 » Oracle合并两行到一行的技巧(oracle 两行变一行)