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. 总结
针对不同的需求,使用不同的方法来实现行拼接,可以提高开发效率和代码的可维护性。