首页 > 数据库    日期:2024-03-31 / 浏览

在 SQL Server 中,可以使用 STUFF 和 FOR XML PATH 进行多行合并成一行。例如,假设有一个表名为 orders ,其中包含订单号和产品名称:

order_idproduct_name
1Product A
1Product B
2Product C
2Product 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_idproducts
1Product A, Product B
2Product 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字段中的重复数据,保留唯一值进行合并。执行结果中不会包含重复的数据。

总结

觉得上面的内容有用吗?快来点个赞吧!

点赞() 我要打赏

温馨提示 : 本站内容来自会员投稿以及互联网,所有源码及教程均为作者总结编辑,请大家在使用过程中提前做好备份,以免发生无法预知的错误,源码类教程请勿直接用于生产环境!

 可能感兴趣的文章