SQL SERVER 資料庫多行合併 1行
阿新 • • 發佈:2020-08-13
1、使用for xml path('') 和stuff
Select * Into #temp From ( select 'A' id,'aa' name union all select 'A' id,'bb' name union all select 'A' id,'cc' name union all select 'B' id,'aa' name )a Select * From #temp --查詢 Select id, stuff((select ','+name from #temp where id=t.id for xml path('')),1,1,'')From #temp t Group by id Drop Table #temp
2、使用字串函式 STRING_AGG,這個函式是SQLSERVER 2017 版本之後才有的
SELECT STRING_AGG(ISNULL(Name,'N/A'), ',') FROM #temp
補充
如:將某張表的所有欄位合併為一行,以逗號隔開: ID,Name,Post
SELECT name FROM SYSCOLUMNS WHERE ID=OBJECT_ID('DCTB') --查詢某表的欄位
①
DECLARE @listStr VARCHAR(MAX); SELECT @listStr= ISNULL(@listStr+',','')+ name FROM SYSCOLUMNS WHERE ID=OBJECT_ID('DCTB') order by colorder SELECT @listStr
②
select id, name=STUFF((SELECT ','+name FROM SYSCOLUMNS t WHERE ID=OBJECT_ID('Work') order by colorder FOR XML PATH('')), 1, 1, '') from SYSCOLUMNS WHERE ID=OBJECT_ID('Work') GROUP BY id