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即可。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM