MSSQL如何优雅合并多行记录(mssql 合并多行)

在常用的关系型数据库中,经常需要去实现数据记录合并,比如MSSQL。但是,如何优雅的去实现多行记录的快速灵活合并?

首先,可以使用CTE,通过CTE来实现多行记录的快速灵活合并。

以下是一个示例,可以使用CTE对Table1合并成一行:

–使用CTE进行数据合并

WITH CTE As

(

SELECT

ROW_NUMBER() OVER (PARTITION BY p.CompanyID, p.OrderNumber ORDER BY p.OrderNumber) AS Rn,

p.CompanyID,

p.OrderNumber,

p.ProductName

FROM Table1 As p

)

SELECT

CompanyID,

OrderNumber,

STUFF((

SELECT ‘,’ + ProductName

FROM CTE

WHERE CTE.rn = T.rn

FOR XML PATH(”),TYPE

).value(‘(./text())[1]’,’VARCHAR(MAX)’)

,1,1,”) AS ProductName

FROM CTE As T

GROUP BY CompanyID,

OrderNumber,

Rn

此外,可以使用FOR XML PATH方式,通过把列中的每条记录拼接在一起,合并到一行记录中去。

以下是一个示例,可以使用FOR XML PATH来实现把Table1中的记录拼接到一行:

–使用 FOR XML PATH的方式进行数据合并

SELECT DISTINCT

p.CompanyID,

p.OrderNumber,

STUFF((

SELECT ‘,’ + p.ProductName

FROM Table1 AS p

where p.CompanyID = p2.CompanyID

and p.OrderNumber = p2.OrderNumber

FOR XML PATH(”)

),1,1,”) AS [List]

FROM Table1 AS p2

以上两种方式的优势都很明显,都可以方便快捷把多行记录快速灵活合并。

总结一下,MSSQL如何优雅合并多行记录:

– 使用CTE来对多行记录快速灵活合并;

– 使用FOR XML PATH来把多行记录拼接到一行。


数据运维技术 » MSSQL如何优雅合并多行记录(mssql 合并多行)