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)

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM