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来把多行记录拼接到一行。