| 閱文時長 | | 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即可,
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/286094.html
標籤:SQL Server
上一篇:MSSQL·備份資料庫中的單表
下一篇:SQL 陳述句決議
