27,579
社区成员
发帖
与我相关
我的任务
分享
with cte_1
as
(select *,ROW_NUMBER() over (order by (select 1)) as rn_1 from #T),
cte_2
as
(select A.*,SUBSTRING(item,number,CHARINDEX('、',item+'、',number)-number) as single_itme,number
from cte_1 A
join master.dbo.spt_values B ON CHARINDEX('、','、'+item,number)=number
where type='p'),
cte_3
as
(select *,ROW_NUMBER() over (partition by rn_1 order by number) as rn_2 from cte_2),
cte_4
as
(select id,name,item_combine
from
(select *,stuff((select distinct '+'+single_itme from cte_3 where rn_2=A.rn_2 and id=A.id for XML path('')),1,1,'') as item_combine
from cte_3 A) as A
group by id,name,item_combine)
select id,name,
stuff((select '、'+item_combine from cte_4 where id=A.id and name=A.name for xml path ('')),1,1,'') as item_combine_final
from cte_4 as A
group by id,name
--测试数据
if not object_id(N'Tempdb..#T') is null
drop table #T
Go
Create table #T([id] nvarchar(22),[name] nvarchar(22),[values] nvarchar(25))
Insert #T
select N'01',N'王明',N'铅' union all
select N'01',N'王明',N'粉尘、噪声'
Go
--测试数据结束
SELECT [id] , [name],
STUFF(( SELECT '、' + #T.[values]
FROM #T
WHERE [id] = a.[id]
FOR
XML PATH('')
), 1, 1, '') AS value
FROM #T a
GROUP BY a.[id] , [name]