--创建测试表 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]
--1 通过 select 累加 DECLARE @sql_col VARCHAR(8000) SELECT @sql_col = ISNULL(@sql_col + ‘,‘,‘‘) + QUOTENAME([Subject]) FROM TestRows2Columns GROUP BY [Subject] SELECT @sql_col
--2 通过 FOR xml path(‘‘) 合并字符串记录 SELECT STUFF( (SELECT ‘#‘ + Subject FROM TestRows2Columns WHERE UserName = ‘王五‘ FOR xml path(‘‘) ),1,1,‘‘ )
--3 分组合并字符串记录 SELECT UserName, Subject = ( STUFF( (SELECT ‘#‘ + Subject FROM TestRows2Columns WHERE UserName = A.UserName FOR xml path(‘‘) ),1,1,‘‘ ) ) FROM TestRows2Columns A GROUP by UserName
原文:http://www.cnblogs.com/xiaozhi1236/p/6344134.html