新聞中心
在常用的關(guān)系型數(shù)據(jù)庫(kù)中,經(jīng)常需要去實(shí)現(xiàn)數(shù)據(jù)記錄合并,比如MSSQL。但是,如何優(yōu)雅的去實(shí)現(xiàn)多行記錄的快速靈活合并?

首先,可以使用CTE,通過(guò)CTE來(lái)實(shí)現(xiàn)多行記錄的快速靈活合并。
以下是一個(gè)示例,可以使用CTE對(duì)Table1合并成一行:
–使用CTE進(jìn)行數(shù)據(jù)合并
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方式,通過(guò)把列中的每條記錄拼接在一起,合并到一行記錄中去。
以下是一個(gè)示例,可以使用FOR XML PATH來(lái)實(shí)現(xiàn)把Table1中的記錄拼接到一行:
–使用 FOR XML PATH的方式進(jìn)行數(shù)據(jù)合并
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
以上兩種方式的優(yōu)勢(shì)都很明顯,都可以方便快捷把多行記錄快速靈活合并。
總結(jié)一下,MSSQL如何優(yōu)雅合并多行記錄:
– 使用CTE來(lái)對(duì)多行記錄快速靈活合并;
– 使用FOR XML PATH來(lái)把多行記錄拼接到一行。
成都服務(wù)器租用選創(chuàng)新互聯(lián),先試用再開通。
創(chuàng)新互聯(lián)(www.cdcxhl.com)提供簡(jiǎn)單好用,價(jià)格厚道的香港/美國(guó)云服務(wù)器和獨(dú)立服務(wù)器。物理服務(wù)器托管租用:四川成都、綿陽(yáng)、重慶、貴陽(yáng)機(jī)房服務(wù)器托管租用。
分享名稱:MSSQL如何優(yōu)雅合并多行記錄(mssql 合并多行)
網(wǎng)頁(yè)URL:http://fisionsoft.com.cn/article/cdcpssg.html


咨詢
建站咨詢
