T_SQL 將一列多行數據合併爲一行

 

   SQL Server在進行數據遷移和報表處理的時候會遇到將一列多行數據拼接爲一個字符串的狀況,爲了處理這個問題,在網上找了一些相關的資料,提供兩種方法,供遇到相似問題的朋友們參考,也藉此加深本身的印象。函數

Table:SCpost

Studentspa

Course3d

張三blog

大學語文ci

李四字符串

大學語文it

張三table

書法鑑賞class

張三

音樂欣賞

李四

電影賞析

 

指望獲得的結果:

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)

 

相關文章
相關標籤/搜索