sqlserver字符串多行合并为一行

Posted 大漠孤烟直

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sqlserver字符串多行合并为一行相关的知识,希望对你有一定的参考价值。

 1 --创建测试表
 2 CREATE TABLE [dbo].[TestRows2Columns](
 3     [Id] [int] IDENTITY(1,1) NOT NULL,
 4     [UserName] [nvarchar](50) NULL,
 5     [Subject] [nvarchar](50) NULL,
 6     [Source] [numeric](18,0) NULL
 7 )
 8 GO
 9 
10 --插入测试数据
11 INSERT INTO [TestRows2Columns] ([UserName],[Subject],[Source]) 
12     SELECT N张三,N语文,60  UNION ALL
13     SELECT N李四,N数学,70  UNION ALL
14     SELECT N王五,N英语,80  UNION ALL
15     SELECT N王五,N数学,75  UNION ALL
16     SELECT N王五,N语文,57  UNION ALL
17     SELECT N李四,N语文,80  UNION ALL
18     SELECT N张三,N英语,100
19 GO
20 
21 SELECT * FROM [TestRows2Columns]
22 
23 
24 
25 
26 --1 通过 select 累加
27 DECLARE @sql_col VARCHAR(8000)
28 SELECT @sql_col = ISNULL(@sql_col + ,,‘‘) + QUOTENAME([Subject]) FROM TestRows2Columns 
29 GROUP BY [Subject]
30 
31 SELECT @sql_col
32 
33 
34 
35 
36 --2 通过 FOR xml path(‘‘) 合并字符串记录
37 SELECT 
38     STUFF(
39         (SELECT # + Subject
40          FROM TestRows2Columns
41          WHERE UserName = 王五
42          FOR xml path(‘‘)
43         ),1,1,‘‘
44         )
45   
46  
47 --3 分组合并字符串记录
48 SELECT
49     UserName,
50     Subject = (
51                STUFF(
52                     (SELECT # + Subject
53                      FROM TestRows2Columns
54                      WHERE UserName = A.UserName
55                      FOR xml path(‘‘)
56                     ),1,1,‘‘
57                     )
58                  )
59 FROM TestRows2Columns A
60 GROUP by UserName

 

以上是关于sqlserver字符串多行合并为一行的主要内容,如果未能解决你的问题,请参考以下文章

SQLserver 根据条件将多行合并为一行

SQLserver 根据条件将多行合并为一行

T_SQL 将一列多行数据合并为一行

T SQL 将一列多行数据合并为一行

在SQL Server中将多行相同id的行合并为一行[关闭]

sqlserver查询一对多的关系、合并多条记录的某字段值到一个字段