• MSSQL·将一对多的数据合并为以指定分隔符的数据


    阅文时长 | 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函数如下语法:
    Stuff(character_expression,start,length,character_expression)
    1. character_expression char
    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. 模拟场景
    create table #User_Game_MoneySum(
    name nvarchar(10) NULL
    ,product Nvarchar(100) NULL
    ,amount BIGINT
    );
     
    insert into #User_Game_MoneySum values ('SCscHero','星际争霸1','233');
    insert into #User_Game_MoneySum values ('SCscHero','星际争霸2','1500');
    insert into #User_Game_MoneySum values ('SCscHero','GTA5','99');
    insert into #User_Game_MoneySum values ('SCscHero','彩虹六号','230');
    insert into #User_Game_MoneySum values ('SCscHero','暗黑破坏神','400');
    insert into #User_Game_MoneySum values ('SCscHero','魔兽争霸3','239');
    insert into #User_Game_MoneySum values ('米特米勒','明日之后','500');
    insert into #User_Game_MoneySum values ('米特米勒','星际争霸2','1000');
    insert into #User_Game_MoneySum values ('星灵风暴','星际争霸2','0');
    insert into #User_Game_MoneySum values ('星灵风暴','CS:GO','20');
    insert into #User_Game_MoneySum values ('大象在房间里','绝地求生','100');
    insert into #User_Game_MoneySum values ('大象在房间里','星际争霸2','0');
    
    select * from #User_Game_MoneySum; 
    
    -- 2. 分组
    select name
    		,products = STUFF(
    						(select ','+product 
    						from #User_Game_MoneySum b
    						where a.name = b.name 
    							for xml path(''))
    						,1
    						,1
    						,'')
    		 ,sum(amount) as amount
      from #User_Game_MoneySum a
      group by name;
    
    DROP TABLE #User_Game_MoneySum
    

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

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

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

  • 相关阅读:
    哈希值
    webpack配置(二)
    点击input选中文本
    height:calc(100%
    -webkit-overflow-scrolling
    字符串转数组
    gulp报错160
    webpack配置(一)
    移动端ios中click点击失效
    Spring定时器Quartz的用法
  • 原文地址:https://www.cnblogs.com/SCscHero/p/14775077.html
Copyright © 2020-2023  润新知