閱文時長 | | 0.05分鍾 | 字數統計 | | 142.4字符 |
主要內容 | | 1、引言&背景 2、Stuff函數語法&模擬場景 3、聲明與參考資料 | ||
『MSSQL·將一對多的數據合並為以指定分隔符的數據』 | |||
編寫人 | | SCscHero | 編寫時間 | | 2021/5/16 PM1:25 |
文章類型 | | 系列 | 完成度 | | 已完成 |
座右銘 | 每一個偉大的事業,都有一個微不足道的開始。 |
一、引言&背景 完成度:100%
a) 應對問題
- 如何將數據按某個字段合並為一行的數據?
- 如何一對多的數據合並為一對一行以逗號分隔符的數據?
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即可。