经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 数据库/运维 » MS SQL Server » 查看文章
MSSQL·将一对多的数据合并为以指定分隔符的数据
来源:cnblogs  作者:SCscHero  时间:2021/5/17 9:18:07  对本文有异议
阅文时长 | 0.05分钟 字数统计 | 142.4字符
主要内容 | 1、引言&背景 2、Stuff函数语法&模拟场景 3、声明与参考资料
『MSSQL·将一对多的数据合并为以指定分隔符的数据』
编写人 | SCscHero 编写时间 | 2021/5/16 PM1:25
文章类型 | 系列 完成度 | 已完成
座右铭 每一个伟大的事业,都有一个微不足道的开始。

一、引言&背景   完成度:100%

a) 应对问题

  1. 如何将数据按某个字段合并为一行的数据?
  2. 如何一对多的数据合并为一对一行以逗号分隔符的数据?

b) 应用场景

如图,上图中一个name对应多个product,每个product对应不同的amount,需要转换成类似于下图中的数据。

二、Stuff函数语法&模拟场景   完成度:100%

  • Stuff函数如下语法:
  1. Stuff(character_expression,start,length,character_expression)
  2. 1. character_expression char
  3. 2. An expression of character data to be deleted. character_expression can be a constant, variable, or column of either character or binary data.
  • 模拟场景
  1. -- 1. 模拟场景
  2. create table #User_Game_MoneySum(
  3. name nvarchar(10) NULL
  4. ,product Nvarchar(100) NULL
  5. ,amount BIGINT
  6. );
  7. insert into #User_Game_MoneySum values ('SCscHero','星际争霸1','233');
  8. insert into #User_Game_MoneySum values ('SCscHero','星际争霸2','1500');
  9. insert into #User_Game_MoneySum values ('SCscHero','GTA5','99');
  10. insert into #User_Game_MoneySum values ('SCscHero','彩虹六号','230');
  11. insert into #User_Game_MoneySum values ('SCscHero','暗黑破坏神','400');
  12. insert into #User_Game_MoneySum values ('SCscHero','魔兽争霸3','239');
  13. insert into #User_Game_MoneySum values ('米特米勒','明日之后','500');
  14. insert into #User_Game_MoneySum values ('米特米勒','星际争霸2','1000');
  15. insert into #User_Game_MoneySum values ('星灵风暴','星际争霸2','0');
  16. insert into #User_Game_MoneySum values ('星灵风暴','CS:GO','20');
  17. insert into #User_Game_MoneySum values ('大象在房间里','绝地求生','100');
  18. insert into #User_Game_MoneySum values ('大象在房间里','星际争霸2','0');
  19. select * from #User_Game_MoneySum;
  20. -- 2. 分组
  21. select name
  22. ,products = STUFF(
  23. (select ','+product
  24. from #User_Game_MoneySum b
  25. where a.name = b.name
  26. for xml path(''))
  27. ,1
  28. ,1
  29. ,'')
  30. ,sum(amount) as amount
  31. from #User_Game_MoneySum a
  32. group by name;
  33. DROP TABLE #User_Game_MoneySum

三、声明与参考资料   完成度:100%

原创博文,未经许可请勿转载。

如有帮助,欢迎点赞、收藏、关注。如有问题,请评论留言!如需与博主联系的,直接博客私信SCscHero即可。

原文链接:http://www.cnblogs.com/SCscHero/p/14775077.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号