【SQL Server】Group Byの結果をカンマ区切りで出力する

Sponsored Links

Group Byの結果を、カンマ区切りで出力させる時に、for xml pathを使用する。

このようなテーブルを作成し、カラムgrでGroup Byし、stの値をカンマ区切りで出力させる。

declare @table table(
       id int,
       gr nvarchar(10),
       st nvarchar(10)
)

insert into @table values   (1, 'group 1', '123'),
                            (2, 'group 1', '234'),
                            (3, 'group 2', '345'),
                            (4, 'group 2', '456'),
                            (5, 'group 2', '456');

for xml path、stuffを使用し、このようなクエリを書くと、stの値がカンマ区切りとなる。

select gr,
    stuff((select ', ' + t2.st
           from @table t2 where t1.gr = t2.gr
           for xml path('')),
          1,2,'') [Values]
from @table t1
group by t1.gr

単純にカンマ区切りとなるため、group 2の方は、456が重複する。

重複を取り除くときはdistinctをかませる。

select gr,
    stuff((select distinct ', ' + t2.st
           from @table t2 where t1.gr = t2.gr
           for xml path('')),
          1,2,'') [Values]
from @table t1
group by t1.gr

IT
Sponsored Links
Sponsored Links
Sponsored Links
ようさんチョットでぶ
Copied title and URL
Bitnami