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

在做报表的时辰,可能需要将查询成果某一列的多行记实,利用逗号分隔,拼接当作一个字符串。这个时辰,该若何实现呢?好比,在bom表中,将查询成果的物料编码列,拼接当作一个字符串,并且,字符串中物料编码不反复

东西/原料

  • sqlserver

方式/步调

  1. 1

    建立一个姑且表,用于演示sqlserver数据库中,若何将一个字段的数据拼接当作一个字符串。例如:将物料清单表中的物料编码,利用逗号分隔,拼接当作一个字符串

    IF OBJECT_ID('tempdb..#tblBom') IS NOT NULL DROP TABLE #tblBom; 

    CREATE TABLE #tblBom(

        OrderNo varchar(50),       -- 订单号

        ItemCode varchar(50),      -- 物料编码

        ItemName varchar(50)     -- 物料名称   

    );

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

  3. 3

    查询姑且表1中的测试数据

    select * from #tblBom;

  4. 4

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

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

  5. 5

    从上面的成果可以看出,不异的物料编码,在字符串中反复呈现了,那么,若何才能拼接不反复的物料编码呢?其实,直接加上去重关头字distinct就可以了

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

  6. 6

    上面的物料编码固然去重了,可是,拼接的字符串最前面是以逗号起头的,若何才能去失落这个逗号呢?这个时辰,就需要利用stuff函数了

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

  7. 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

  • 发表于 2019-05-28 22:02
  • 阅读 ( 1149 )
  • 分类:其他类型

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
admin
admin

0 篇文章

作家榜 »

  1. xiaonan123 189 文章
  2. 汤依妹儿 97 文章
  3. luogf229 46 文章
  4. jy02406749 45 文章
  5. 小凡 34 文章
  6. Daisy萌 32 文章
  7. 我的QQ3117863681 24 文章
  8. 华志健 23 文章

联系我们:uytrv@hotmail.com 问答工具