SQL Server 如何将两行数据合并到一起

在SQL Server中,我们经常会遇到需要将两行数据合并到一起的情况。这可能是因为我们需要在一个查询结果中将相关的两行数据进行合并,或者需要将两个表中的数据进行匹配和组合。本文将介绍如何使用SQL Server来实现这一目标,并提供一个实际问题的解决方案。

实际问题

假设我们有一个员工表(Employee),其中包含员工的姓名、部门、工资和入职日期等信息。现在我们需要在一个查询中将每个员工的姓名和工资合并到一起。

员工表(Employee)

姓名 部门 工资 入职日期
张三 销售部 5000 2019-01-01
李四 人事部 6000 2018-05-01
王五 技术部 7000 2020-03-01

解决方案

为了将每个员工的姓名和工资合并到一起,我们可以使用SQL Server中的联接操作。具体来说,我们可以使用内连接、左连接或者右连接等方式来实现这个目标。

内连接(Inner Join)

内连接是最常用的联接方式之一,它会返回两个表中匹配的行。在这种情况下,我们需要将员工表和自身进行内连接,以便将每个员工的姓名和工资合并到一起。

SELECT e1.姓名, e1.工资, e2.姓名, e2.工资
FROM Employee e1
INNER JOIN Employee e2 ON e1.姓名 <> e2.姓名

上述查询将返回所有不同姓名的员工的工资组合。例如,对于上面的员工表,查询结果将是以下内容:

姓名 工资 姓名 工资
张三 5000 李四 6000
张三 5000 王五 7000
李四 6000 张三 5000
李四 6000 王五 7000
王五 7000 张三 5000
王五 7000 李四 6000

左连接(Left Join)

左连接是另一种常用的联接方式,它会返回左表中的所有行以及与右表匹配的行。在这种情况下,我们可以使用左连接来将每个员工的姓名和工资合并到一起。

SELECT e1.姓名, e1.工资, e2.姓名, e2.工资
FROM Employee e1
LEFT JOIN Employee e2 ON e1.姓名 <> e2.姓名

上述查询将返回所有不同姓名的员工的工资组合,并且包括没有匹配的员工的工资。例如,对于上面的员工表,查询结果将是以下内容:

姓名 工资 姓名 工资
张三 5000 李四 6000
张三 5000 王五 7000
李四 6000 张三 5000
李四 6000 王五 7000
王五 7000 张三 5000
王五 7000 李四 6000

右连接(Right Join)

右连接是左连接的镜像,它会返回右表中的所有行以及与左表匹配的行。在这种情况下,我们可以使用右连接来将每个员工的姓名和工资合并到一起。

SELECT e1.姓名, e1.工资, e2.姓名, e2.工资
FROM Employee e1
RIGHT JOIN Employee e2 ON e1.姓名 <> e2.姓名