SQL Server 2012中用T-SQL合并同学生不同课程的行
SQL Server 2012 学生数据行合并(Course字段逗号拼接)解决方案
原学生表数据
| Name | Course | Address | Contact | |
|---|---|---|---|---|
| Venu Gopal N | CPA | Hyderabad | test@gmail.com | 999999999 |
| Venu Gopal N | CMA | Hyderabad | test@gmail.com | 999999999 |
| Venu N | CPA | Hyderabad | test1@gmail.com | 999999988 |
| Venu N | EA | Hyderabad | test1@gmail.com | 999999988 |
| Venu N | DA | Hyderabad | test1@gmail.com | 999999988 |
期望合并结果
| Name | Course | Address | Contact | |
|---|---|---|---|---|
| Venu Gopal N | CPA, CMA | Hyderabad | test@gmail.com | 999999999 |
| Venu N | CPA, EA, DA | Hyderabad | test1@gmail.com | 999999988 |
T-SQL 实现代码
假设你的表名为Students,执行以下语句即可完成合并:
SELECT Name, STUFF( (SELECT ', ' + Course FROM Students s2 WHERE s2.Name = s1.Name AND s2.Address = s1.Address AND s2.Email = s1.Email AND s2.Contact = s1.Contact FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 2, '' ) AS Course, Address, Email, Contact FROM Students s1 GROUP BY Name, Address, Email, Contact;
代码说明
- 利用
FOR XML PATH('')将同一学生的所有Course值拼接成带前置逗号的字符串(例如, CPA, CMA) - 通过
STUFF函数移除字符串开头多余的,(从第1位开始删除2个字符,替换为空) - 使用
GROUP BY按学生的唯一标识字段分组,确保每个学生只返回一条合并后的记录
内容的提问来源于stack exchange,提问作者Venu
相关产品推荐
相关产品推荐

