这是你想要的吗?
Concatenating item values 低于标记范围?
我使用 STUFF 和 FOR XML PATH('') 方法来聚合以逗号分隔的范围内的项目。
--create table #unw( ITEM varchar(10), MarkRange varchar(10))
/*
insert into #unw values
('ENG-MA','20-39%'),
('A1-014','40-59%'),
('A2-10','1-9%'),
('15-69','20-39%')
*/
;with cte as (
select
case when MarkRange = '1-9%' then item end as [1-9%],
case when MarkRange = '20-39%' then item end as [20-39%],
case when MarkRange = '40-59%' then item end as [40-59%]
from #unw
)
select distinct
stuff(
(
select isnull(',' + [1-9%],'')
from cte
for xml path('')
),1,1,'') as [1-9%],
stuff(
(
select isnull(',' + [20-39%],'')
from cte
for xml path('')
),1,1,'') as [20-39%],
stuff(
(
select isnull(',' + [40-59%],'')
from cte
for xml path('')
),1,1,'') as [40-59%]
from cte
查询的输出如下
我将逗号“,”替换为回车 + 换行符,如下所示
;with cte as (
select
case when MarkRange = '1-9%' then item end as [1-9%],
case when MarkRange = '20-39%' then item end as [20-39%],
case when MarkRange = '40-59%' then item end as [40-59%]
from #unw
)
select
replace(cast([1-9%] as varchar(30)), ',', CHAR(13)+CHAR(10)) [1-9%],
replace(cast([20-39%] as varchar(30)), ',', CHAR(13)+CHAR(10)) [20-39%],
replace(cast([40-59%] as varchar(30)), ',', CHAR(13)+CHAR(10)) [40-59%]
from
(
select distinct
stuff(
(
select isnull(',' + [1-9%],'')
from cte
for xml path('')
),1,1,'') as [1-9%],
stuff(
(
select isnull(',' + [20-39%],'')
from cte
for xml path('')
),1,1,'') as [20-39%],
stuff(
(
select isnull(',' + [40-59%],'')
from cte
for xml path('')
),1,1,'') as [40-59%]
from cte
) t