iT邦幫忙

0

如何將多筆的欄字串組成同一欄

主料與替代料由多筆合併為一筆(以主料為主),
一次性資料整理需求,希望由多個sql完成.
https://ithelp.ithome.com.tw/upload/images/20200313/20125246ZSXYGB3w4p.png

slime iT邦大師 1 級 ‧ 2020-03-13 16:07:47 檢舉
group_concat

(不同的 SQL 軟體語法會有不同)

2 個回答

0
rogeryao
iT邦大師 5 級 ‧ 2020-03-13 16:54:18
最佳解答

MS SQL 2017

CREATE TABLE TEST(parts nvarchar(10),flag nvarchar(10),groupno nvarchar(10));
insert into TEST
values ('p1','m','01'),
('p2','r','01'),
('p3','m','02'),
('p4','r','02'),
('p5','r','02'),
('p6','m','03');
select TEST.*,M.partsnew
from TEST
--
left join (
select groupno,
       partsnew=string_agg(parts,',')
from TEST
where 1=1
and flag='r'
group by groupno
) as M on M.groupno=TEST.groupno
--
where 1=1
and flag='m'
order by parts

DEMO

cyc0713 iT邦新手 5 級 ‧ 2020-03-13 17:46:49 檢舉

Thanks Master.

1
pilipala
iT邦新手 5 級 ‧ 2020-03-13 23:05:27

使用 SQL Server 2017 的 STRING_AGG 功能


DROP TABLE IF EXISTS Demo

CREATE TABLE Demo(parts nvarchar(10),flag nvarchar(10),groupno nvarchar(10));

INSERT INTO Demo (parts,flag,groupno) values 
	('p1','m','01'),
	('p2','r','01'),
	('p3','m','02'),
	('p4','r','02'),
	('p5','r','02'),
	('p6','m','03');

SELECT 
	groupno , 
	MAX(IIF(flag = 'm' , Parts , null)) AS [Master] ,
	STRING_AGG(IIF(flag = 'r' , Parts , null) , ',') AS DetailList
FROM Demo
GROUP BY groupno

我要發表回答

立即登入回答