SQL 一列轉多行合併方法
阿新 • • 發佈:2018-12-21
T_SQL 將一列多行資料合併為一行
SQL Server在進行資料遷移和報表處理的時候會遇到將一列多行資料拼接為一個字串的情況,為了處理這個問題,在網上找了一些相關的資料,提供兩種方法,供遇到類似問題的朋友們參考,也藉此加深自己的印象。
Table:SC
Student
Course
張三
大學語文
李四
大學語文
張三
書法鑑賞
張三
音樂欣賞
李四
電影賞析
期望得到的結果:
Student
Course
張三
大學語文,書法鑑賞,音樂欣賞
李四
大學語文,電影賞析
IF OBJECT_ID(N’SC’) IS NOT NULL
BEGIN DROP TABLE SC END
ELSE
BEGIN CREATE TABLE SC ( Student NVARCHAR(50), Course NVARCHAR(50) ) INSERT INTO SC SELECT N'張三',N'大學語文' UNION ALL SELECT N'李四',N'大學語文' UNION ALL SELECT N'張三',N'書法鑑賞' UNION ALL SELECT N'張三',N'音樂賞析' UNION ALL SELECT N'李四',N'電影賞析' END
GO
(5 row(s) affected)
s
方法一:使用者自定義函式
CREATE FUNCTION FN_Merge (@Student NVARCHAR(50))
RETURNS NVARCHAR(50)
AS
BEGIN
DECLARE @Course NVARCHAR(50)
SELECT @Course = ISNULL(@Course + ',','') + @Course
FROM SC
WHERE Student = @Student
RETURN @COURSE
END
SELECT DISTINCT [Student]
,dbo.FN_Merge([Student]) AS Course
FROM [dbo].[SC]
結果:
(2 row(s) affected)
方法二:FOR XML PATH
SELECT DISTINCT [Student]
,STUFF(
(
SELECT ','+[Course]
FROM [dbo].[SC]
WHERE Student = A.Student
FOR XML PATH('')
)
,1,1,''
)AS Course
FROM [dbo].[SC] AS A
結果:
(2 row(s) affected)