MS SQL Group By 值拼接

MS SQL Group By 值拼接

MS SQL Group By 值拼接

在使用 MS SQL Server 进行数据查询和分析的过程中,经常会遇到需要对数据进行分组并将分组后的值进行拼接的情况。比如,我们有一个学生表,需要按照班级对学生进行分组,并将每个班级的学生姓名拼接成一个字符串。在这种情况下,就需要使用到 GROUP BY 和字符串拼接函数来实现。

本文将详细介绍如何使用 MS SQL Server 中的 GROUP BY 和字符串拼接函数来实现对分组后的值进行拼接,包括使用 FOR XML PATHSTUFF 函数来实现这一功能。

示例数据准备

为了方便演示,我们首先准备一个包含学生信息的表 Student,表结构如下:

CREATE TABLE Student (
    Id INT PRIMARY KEY,
    Name NVARCHAR(50),
    Class NVARCHAR(20)
);

INSERT INTO Student VALUES
(1, 'Alice', 'ClassA'),
(2, 'Bob', 'ClassA'),
(3, 'Cathy', 'ClassB'),
(4, 'David', 'ClassB'),
(5, 'Eve', 'ClassC');

使用 FOR XML PATH 实现值拼接

在 MS SQL Server 中,可以使用 FOR XML PATH 来实现对分组后的值进行拼接。具体步骤如下:

  1. 使用 GROUP BY 对数据进行分组;
  2. 使用 FOR XML PATH 标签来拼接分组后的值。

下面是一个示例 SQL 语句,实现对学生表按照班级进行分组,并将每个班级的学生姓名拼接成一个字符串:

SELECT Class, 
       STUFF((SELECT ', ' + Name
              FROM Student s
              WHERE s.Class = t.Class
              FOR XML PATH('')), 1, 2, '') AS Students
FROM Student t
GROUP BY Class;

上面的 SQL 语句中,STUFF 函数的作用是删除拼接字符串中的第一个逗号和空格。在运行上述 SQL 语句后,将得到以下结果:

Class Students
ClassA Alice, Bob
ClassB Cathy, David
ClassC Eve

使用 STRING_AGG 函数(SQL Server 2017+)

从 SQL Server 2017 版本开始,引入了 STRING_AGG 函数,可以更便捷地实现对分组后的值进行拼接。具体用法如下所示:

SELECT Class, 
       STRING_AGG(Name, ', ') AS Students
FROM Student
GROUP BY Class;

使用 STRING_AGG 函数可以简化对分组后值的拼接,避免了使用 FOR XML PATH 的繁琐语法。执行上述 SQL 语句,将得到与上一个示例相同的结果。

小结

本文介绍了在 MS SQL Server 中使用 GROUP BY 和字符串拼接函数实现对分组后的值进行拼接的方法。通过示例演示了如何使用 FOR XML PATHSTUFF 函数,以及 SQL Server 2017 新增的 STRING_AGG 函数来实现这一功能。在实际应用中,可根据具体需求选择合适的方式来实现对分组后的值的拼接操作。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程