我已经找到了这个有趣的帖子
Simulating group_concat MySQL function in Microsoft SQL Server 2005?
use test
go
create table methods (
id int identity,
id_exam int,
method int
)
go
insert into methods (id_exam,method) values (1,5)
insert into methods (id_exam,method) values (1,2)
insert into methods (id_exam,method) values (1,5)
insert into methods (id_exam,method) values (2,1)
insert into methods (id_exam,method) values (3,5)
insert into methods (id_exam,method) values (3,2)
insert into methods (id_exam,method) values (3,2)
insert into methods (id_exam,method) values (4,5)
insert into methods (id_exam,method) values (4,3)
select
id_exam,
method = replace ((select method AS [data()]
from methods
where id_exam = a.id_exam
order by id_exam for xml path('')), ' ', ',')
from methods a
where id_exam is not null
group by id_exam
给了我
1 5,2,5
2 1
3 5,2,2
4 5,3
但是,我想从每个考试中删除重复项并对连接结果进行排序以获得
1 2,5
2 1
3 2,5
4 3,5
感谢。
答案 0 :(得分:4)
尝试在内部查询中使用DISTINCT,并按方法而不是id_exam进行排序。
select
id_exam,
method = replace ((select distinct method AS [data()]
from methods
where id_exam = a.id_exam
order by method for xml path('')), ' ', ',')
from methods a
where id_exam is not null
group by id_exam
答案 1 :(得分:1)
在内部查询中添加group by method
,并将order by id_exam
更改为order by method
。
select
id_exam,
method = replace ((select method AS [data()]
from methods
where id_exam = a.id_exam
group by method
order by method for xml path('')), ' ', ',')
from methods a
where id_exam is not null
group by id_exam
结果:
id_exam method
----------- ---------
1 2,5
2 1
3 2,5
4 3,5