sql server多行数据合并一行显示简单实现代码
在 SQL Server 中,可以使用 STUFF 和 FOR XML PATH 进行多行合并成一行。例如,假设有一个表名为 orders ,其中包含订单号和产品名称:
| order_id | product_name |
|---|---|
| 1 | Product A |
| 1 | Product B |
| 2 | Product C |
| 2 | Product D |
以下查询将在 order_id 列上分组,将产品名称合并成一行:
SELECT order_id, STUFF((SELECT ', ' + product_name
FROM orders o2
WHERE o2.order_id = o1.order_id
FOR XML PATH('')), 1, 2, '') AS products
FROM orders o1
GROUP BY order_id
结果如下所示:
| order_id | products |
|---|---|
| 1 | Product A, Product B |
| 2 | Product C, Product D |
在STUFF函数中,第一个参数指定要插入的位置,第二个参数指定要从第一个参数指定的位置开始删除的字符数,第三个参数指定要插入的新值。在此查询中,使用 FOR XML PATH 将每个产品名称转换为逗号分隔的字符串,然后使用 STUFF 将第一个逗号删除并将所有产品名称合并成一个字符串。最后,使用 GROUP BY 在 order_id 列的基础上进行分组。
附:SQL多行合并成一行语句去重
有时候,多行数据中可能会存在重复的内容。在进行合并时,需要去除这些重复的内容,只保留一个即可。可以使用DISTINCT关键字实现去重。
SELECT GROUP_CONCAT(DISTINCT name SEPARATOR ',') FROM user;
在上述SQL语句中,DISTINCT关键字会去除name字段中的重复数据,保留唯一值进行合并。执行结果中不会包含重复的数据。
总结
到此这篇关于sql server多行数据合并一行显示的文章就介绍到这了,更多相关sql server多行数据合并一行内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
SQL Server Reporting Services 匿名登录的问题及解决方案
这篇文章主要介绍了关于 SQL Server Reporting Services 匿名登录的解决方案,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2022-09-09
自动清理 MSSQL Server Table Collation问题的解决方法
Cannot resolve the collation conflict between "Latin1_General_CI_AS" and "SQL_Latin1_General_CP1_CI_AS" in the equal to operation2013-02-02


最新评论