数据库如何将一列的值,拼接为逗号分隔的字符串
来源:网络收集 点击: 时间:2024-05-08创建一个临时表,用于演示sqlserver数据库中,如何将一个字段的数据拼接成一个字符串。例如:将物料清单表中的物料编码,使用逗号分隔,拼接成一个字符串
IF OBJECT_ID(tempdb..#tblBom) IS NOT NULL DROP TABLE #tblBom;
CREATE TABLE #tblBom(
OrderNo varchar(50), -- 订单号
ItemCode varchar(50), -- 物料编码
ItemName varchar(50) -- 物料名称
);

往临时表中插入几行测试数据,模拟物料清单
insert into #tblBom(OrderNo, ItemCode, ItemName) values(PO2019001, MC001, 物料1);
insert into #tblBom(OrderNo, ItemCode, ItemName) values(PO2019001, MC002, 物料2);
insert into #tblBom(OrderNo, ItemCode, ItemName) values(PO2019001, MC003, 物料3);
insert into #tblBom(OrderNo, ItemCode, ItemName) values(PO2019002, MC001, 物料1);
insert into #tblBom(OrderNo, ItemCode, ItemName) values(PO2019003, MC005, 物料5);

查询临时表1中的测试数据
select * from #tblBom;

假设表中的数据很少,而且,需求也是要将所有的物料编码,使用逗号拼接起来,那么,就可以使用for xml path语法
select , + ItemCode from #tblBom for xml path()

从上面的结果可以看出,相同的物料编码,在字符串中重复出现了,那么,如何才能拼接不重复的物料编码呢?其实,直接加上去重关键字distinct就可以了
select distinct , + ItemCode from #tblBom for xml path()

上面的物料编码虽然去重了,但是,拼接的字符串最前面是以逗号开始的,如何才能去掉这个逗号呢?这个时候,就需要使用stuff函数了
select (stuff((select distinct , + ItemCode from #tblBom for xml path()),1,1,))

上面都是查询整个表的结果,实际使用时,经常需要按照一定的条件过滤,这个时候就需要使用关联语句了
select ItenCode = (select stuff((select distinct , + ItemCode from #tblBom where OrderNo = tbl.OrderNo for xml path()), 1, 1, ))
from #tblBom tbl
where tbl.OrderNo = PO2019001
group by tbl.OrderNo

版权声明:
1、本文系转载,版权归原作者所有,旨在传递信息,不代表看本站的观点和立场。
2、本站仅提供信息发布平台,不承担相关法律责任。
3、若侵犯您的版权或隐私,请联系本站管理员删除。
4、文章链接:http://www.1haoku.cn/art_708947.html