2018/09/06

[SQL]將多筆資料中某一欄的資料轉作一列顯示

「Combine Multiple Rows into One Row using SQL Server」,< br>提供2種做法,覺得第2種很牛,所以註記一下,也跟大家分享。
--建立table變數
DECLARE @T1 AS TABLE (
busid NVARCHAR(20)
, drivername NVARCHAR(20)
, insurlistnum NVARCHAR(10)
, insurchildname NVARCHAR(10)
);
--新增資料
INSERT INTO @T1 ( busid , drivername , insurlistnum , insurchildname )
VALUES
( N'吉A30241' , N'高 明' , N'PICC12345' , N'死亡伤残赔偿' )
, ( N'吉A30241' , N'高 明' , N'PICC12345' , N'医疗费用赔偿' )
,( N'吉A30241' , N'高 明' , N'PICC12345' , N'财产损失赔偿' );
--撈出資料
SELECT * FROM @T1;

做法1,用變數及COALESCE來串接

DECLARE @str NVARCHAR(MAX)
SELECT @str = COALESCE(@str + ', ', '') + [insurchildname] FROM @T1;



SELECT DISTINCT busid , drivername , insurlistnum , @str AS [险种] FROM @T1;




做法2,透過FOR XML及STUFF

FOR XML那行再加上WHERE條件

SELECT DISTINCT busid , drivername , insurlistnum , STUFF( (SELECT ', ' + insurchildname from @T1 FOR XML PATH('')), 1, 1, '') AS [险种] FROM @T1;



沒有留言:

張貼留言