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. 总结

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

数据库标签