2011-06-19 13 views
1

をエミュレートした結果を並べ替える私はすでに、私はそれぞれから重複を削除したいしかし、私には、重複を削除し、GROUP_CONCAT

1 5,2,5 
2 1 
3 5,2,2 
4 5,3 

を与えるこの興味深いスレッド

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 2,5 
2 1 
3 2,5 
4 3,5 

ありがとうございました。

答えて

4

id_examではなく、内側のクエリでDISTINCTを使用し、メソッドで並べ替えてみてください。

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 
+0

ありがとうございました。それは素晴らしい作品です。 :) –

1

内側のクエリにgroup by methodを追加し、order by methodorder by id_examを変更します。

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 
+0

+1。あなたにもありがとう:) –