1. 程式人生 > >SQL 一列轉多行合併方法

SQL 一列轉多行合併方法

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)