sqlserver 字符串多行合并为一行

 时间:2026-05-02 12:27:48

1、--创建测试表

IF OBJECT_ID('test') IS NOT NULL   

    DROP TABLE test

CREATE TABLE dbo.test(  

    id int IDENTITY(1,1) NOT NULL,

    name varchar(50) NULL,

    subject varchar(50) NULL,

    source decimal(18,2) NULL

)

GO

2、--插入测试数据

INSERT INTO test (name,subject,source)    

SELECT '张三','语文',60  UNION ALL   

SELECT '张三','英语',90  UNION ALL  

SELECT '李四','语文',70  UNION ALL   

SELECT '李四','数学',80  UNION ALL   

SELECT '王五','数学',75  UNION ALL   

SELECT '王五','英语',80

GO

SELECT * FROM test

3、--方法1:通过 select 累加

DECLARE @sql_col VARCHAR(8000)

SELECT @sql_col = ISNULL(@sql_col + ',','') + QUOTENAME(subject)

FROM test

GROUP BY subject

SELECT @sql_col

4、--方法2:通过 FOR xml path('') 合并字符串记录

SELECT

    STUFF(

        (SELECT '#' + subject

         FROM test

         WHERE name = '王五'

         FOR xml path('')

        ),1,1,''

        )

5、--方法3:分组合并字符串记录

SELECT

    name,

    Subject = (

               STUFF(

                    (SELECT '#' + subject

                     FROM test

                     WHERE name = A.name

                     FOR xml path('')

                    ),1,1,''

                    )

                 )

FROM test A

GROUP by name

  • 快速标注地质点
  • 方舟怎么孵化恐龙蛋
  • 虾皮新手批量发布产品快速铺货详细教程
  • 如何更换图片背景?
  • 玉米须(俗称“龙须”)的功效与作用
  • 热门搜索
    手抄报花边简笔画 抗病毒手抄报 同讲普通话携手进小康手抄报 全国爱眼日手抄报 新学期新起点手抄报 小学生元宵节手抄报 一二年级防溺水手抄报 有关绿色环保的手抄报 光盘行动手抄报内容 春节的来历手抄报