sqlserver分組將多行合併成一行

--創建測試表
CREATE TABLE [dbo].[TestRows2Columns](
    [Id] [int] IDENTITY(1,1) NOT NULL,
    [UserName] [nvarchar](50) NULL,
    [Subject] [nvarchar](50) NULL,
    [Source] [numeric](18,0) NULL
)
GO

--插入測試數據
INSERT INTO [TestRows2Columns] ([UserName],[Subject],[Source]) 
    SELECT N'張三',N'語文',60  UNION ALL
    SELECT N'李四',N'數學',70  UNION ALL
    SELECT N'王五',N'英語',80  UNION ALL
    SELECT N'王五',N'數學',75  UNION ALL
    SELECT N'王五',N'語文',57  UNION ALL
    SELECT N'李四',N'語文',80  UNION ALL
    SELECT N'張三',N'英語',100
GO

SELECT * FROM [TestRows2Columns]

一、分組合並多行:

SELECT B.UserName,(SELECT RTRIM( A.[Subject]) +''+QUOTENAME(A.Source) +',' FROM TestRows2Columns A 
 WHERE A.UserName=B.UserName FOR XML PATH ('')) AS DDDD
 FROM TestRows2Columns B
 GROUP BY UserName 

註釋:RTRM函數是去除右邊的空格;QUOTENAM函數給字段套個字符,默認套個[];

效果:



二、單列多行合成一行

select( SELECT RTRIM(UserName) + ',' FROM TestRows2Columns  FOR XML PATH ('')  ) as ddd

效果:








發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章