--創建測試表 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
效果: