SQL Server下的行拼接实现方案

1. 前言

在开发过程中,有时需要将一张表中的多条记录按照一定的规则合并成一条记录,这就需要使用行拼接技术。

2. SQL Server中的行拼接实现方案

SQL Server中实现行拼接的方法有多种,如使用FOR XML PATH语句,使用COALESCE语句,使用STUFF函数等。

2.1 使用FOR XML PATH语句

使用FOR XML PATH语句可以将表中多条记录合并成一条记录。

以一个实例为例:

CREATE TABLE Student

(

StudentID int,

StudentName nvarchar(50),

CourseName nvarchar(50)

)

INSERT INTO Student VALUES(1,'小明','语文')

INSERT INTO Student VALUES(1,'小明','数学')

INSERT INTO Student VALUES(1,'小明','英语')

SELECT StudentID, StudentName, (SELECT CourseName + ', ' AS [text()]

FROM Student AS T2

WHERE T2.StudentID = T1.StudentID

ORDER BY CourseName

FOR XML PATH('')) AS AllCourses

FROM Student AS T1

GROUP BY StudentID, StudentName

执行以上代码,将会得到以下结果:

StudentID   StudentName   AllCourses

1 小明 英语, 数学, 语文,

其中,使用FOR XML PATH语句的作用是将每个学生的课程名按照一定的顺序拼接成一条字符串。

2.2 使用COALESCE语句

使用COALESCE语句也可以实现行拼接。

以一个实例为例:

CREATE TABLE Student

(

StudentID int,

CourseName nvarchar(50)

)

INSERT INTO Student VALUES(1,'语文')

INSERT INTO Student VALUES(1,'数学')

INSERT INTO Student VALUES(1,'英语')

SELECT StudentID, COALESCE(CourseName + ', ', '') AS AllCourses

FROM Student

GROUP BY StudentID, CourseName

执行以上代码,将会得到以下结果:

StudentID   AllCourses

1 语文, 数学, 英语,

其中,使用COALESCE函数的作用是将每个学生的课程名拼接成一条字符串。

2.3 使用STUFF函数

使用STUFF函数也可以实现行拼接。

以一个实例为例:

CREATE TABLE Student

(

StudentID int,

CourseName nvarchar(50)

)

INSERT INTO Student VALUES(1,'语文')

INSERT INTO Student VALUES(1,'数学')

INSERT INTO Student VALUES(1,'英语')

SELECT T1.StudentID, STUFF((SELECT ',' + T2.CourseName

FROM Student AS T2

WHERE T1.StudentID = T2.StudentID

FOR XML PATH('')), 1, 1, '') AS AllCourses

FROM Student AS T1

GROUP BY StudentID

执行以上代码,将会得到以下结果:

StudentID   AllCourses

1 语文, 数学, 英语

其中,使用STUFF函数的作用是将每个学生的课程名拼接成一条字符串。

3. 总结

针对不同的需求,使用不同的方法来实现行拼接,可以提高开发效率和代码的可维护性。

免责声明:本文来自互联网,本站所有信息(包括但不限于文字、视频、音频、数据及图表),不保证该信息的准确性、真实性、完整性、有效性、及时性、原创性等,版权归属于原作者,如无意侵犯媒体或个人知识产权,请来电或致函告之,本站将在第一时间处理。猿码集站发布此文目的在于促进信息交流,此文观点与本站立场无关,不承担任何责任。

数据库标签