599CN.COM - 【源码之家】老牌网站源码下载站,提供完整商业网站源码下载!

sqlserver行转列拼接

源码网2023-07-14 16:40:40172SQL Server函数数据name

实现表格数据的行转列拼接

在SQL Server中,行转列拼接是一种将表格数据中的行数据转换成列数据,并将不同行的数据拼接在一起的技术。通常在需要将多行数据合并成一行数据的情况下使用。

步骤一:创建示例表格

为了演示行转列拼接的过程,我们首先需要创建一个示例表格。假设我们有一个名为Employee的表格,包含以下字段:

CREATE TABLE Employee ( ID INT PRIMARY KEY, Name VARCHAR(100), Department VARCHAR(100), Salary INT )

插入一些数据:

INSERT INTO Employee (ID, Name, Department, Salary) VALUES (1, '张三', '财务部', 5000), (2, '李四', '市场部', 6000), (3, '王五', '人力资源部', 7000)

步骤二:使用STUFF函数进行行转列拼接

SQL Server中的STUFF函数可以将一个字符串的一部分替换为另一个字符串。在行转列拼接中,我们可以使用该函数来替换要拼接的列。

以下是使用STUFF函数进行行转列拼接的示例代码:

SELECT ID, Name, STUFF((SELECT ';' + Department FROM Employee FOR XML PATH('')), 1, 1, '') AS Departments, Salary FROM Employee

执行上述代码后,会将Employee表格中的所有部门拼接成一行,并在每个部门之间使用分号进行分隔。

步骤三:使用PIVOT进行行转列拼接

除了使用STUFF函数之外,SQL Server还提供了PIVOT函数来执行行转列拼接。PIVOT函数可以将一列数据转换成多个列,每个不同的值都会转换成一个新的列。

以下是使用PIVOT函数进行行转列拼接的示例代码:

SELECT ID, Name, [财务部], [市场部], [人力资源部], Salary FROM ( SELECT ID, Name, Department, Salary FROM Employee ) AS SourceTable PIVOT ( MAX(Department) FOR Department IN ([财务部], [市场部], [人力资源部]) ) AS PivotTable

上述代码中,我们将Department列转换成了3个不同的列([财务部]、[市场部]、[人力资源部]),并将每个部门对应的值填充至新的列中。

步骤四:使用字符串拼接函数进行行转列拼接

除了STUFF函数和PIVOT函数之外,我们还可以使用字符串拼接函数(如CONCAT、CONCAT_WS等)进行行转列拼接。

以下是使用CONCAT函数进行行转列拼接的示例代码:

SELECT ID, Name, CONCAT(Department1, ';', Department2, ';', Department3) AS Departments, Salary FROM ( SELECT ID, Name, MAX(CASE WHEN Department = '财务部' THEN Department END) AS Department1, MAX(CASE WHEN Department = '市场部' THEN Department END) AS Department2, MAX(CASE WHEN Department = '人力资源部' THEN Department END) AS Department3, Salary FROM Employee GROUP BY ID, Name, Salary ) AS SourceTable

上述代码中,我们使用了多个CASE WHEN语句将不同的部门分别存储在不同的列中,然后使用CONCAT函数将这些列进行拼接。

总结

SQL Server的行转列拼接功能可以帮助我们将表格数据从行数据转换成列数据,并将不同行的数据拼接在一起。通过使用STUFF函数、PIVOT函数或字符串拼接函数,我们可以灵活地实现行转列拼接的需求。

转载声明:本站发布文章及版权归原作者所有,转载本站文章请注明文章来源!

本文链接:https://599cn.com/post/11159.html