数据库如何将一列的值,拼接为逗号分隔的字符串

  • 原创
  • |
  • 浏览: 9231
  • |
  • 更新:
  • |
  • 标签: 数据库 SQL

在做报表的时候,可能需要将查询结果某一列的多行记录,使用逗号分隔,拼接成一个字符串。这个时候,该如何实现呢?比如,在bom表中,将查询结果的物料编码列,拼接成一个字符串,而且,字符串中物料编码不重复

方法/步骤

  1. 2

    往临时表中插入几行测试数据,模拟物料清单

    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');

  2. 3

    查询临时表1中的测试数据

    select * from #tblBom;

  3. 4

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

    select ',' + ItemCode from #tblBom  for xml path('')

  4. 5

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

    select distinct ',' + ItemCode from #tblBom  for xml path('')

  5. 6

    上面的物料编码虽然去重了,但是,拼接的字符串最前面是以逗号开始的,如何才能去掉这个逗号呢?这个时候,就需要使用stuff函数了

    select (stuff((select distinct ',' + ItemCode from #tblBom  for xml path('')),1,1,''))

  6. 7

    上面都是查询整个表的结果,实际使用时,经常需要按照一定的条件过滤,这个时候就需要使用关联语句了

    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

    END
经验内容仅供参考,如果您需解决具体问题(尤其法律、医学等领域),建议您详细咨询相关领域专业人士。
作者声明: 本篇经验系本人依照真实经历原创,未经许可,谢绝转载。
展开阅读全部
相关标签 数据库 SQL