1. 程式人生 > 實用技巧 >SQL SERVER 資料庫多行合併 1行

SQL SERVER 資料庫多行合併 1行

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