SQLServerでレコードの値をカンマ区切りに変換する
SQLServerでレコードの値をカンマ区切りに変換する方法について紹介します。
コーディング例
BEGIN
-- テストテーブルの作成
CREATE TABLE #Test(
Code INT
,[Name] VARCHAR(10)
,GroupNo INT
)
INSERT INTO #Test
VALUES (1, 'AAA', 1)
,(2, 'BBB', 1)
,(3, 'CCC', 2)
,(4, 'DDD', 1)
,(5, 'EEE', 2)
;
-- テストテーブルの表示
SELECT * FROM #Test;
-- GroupNo毎にNameをカンマ区切りで表示する
SELECT
GroupNo
,STRING_AGG([Name], ',') WITHIN GROUP (ORDER BY Code) AS Member
FROM
#Test
GROUP BY
GroupNo
;
-- テストテーブルを削除する
DROP TABLE #Test;
END
実行結果
| Code | Name | GroupNo |
|---|---|---|
| 1 | AAA | 1 |
| 2 | BBB | 1 |
| 3 | CCC | 2 |
| 4 | DDD | 1 |
| 5 | EEE | 2 |
| GroupNo | Member |
|---|---|
| 1 | AAA,BBB,DDD |
| 2 | CCC,EEE |
3~14行目でテストテーブルの#Testを作成し、17行目でそのデータを表示しています。実行結果の1つ目の結果となります。
20~27行目で実行結果の2つ目の結果を出力していますが、22行目のSTRING_AGG関数によりName列をカンマ区切りに変換しています。WITHIN GROUP句でName列をCode列の昇順で並べるように指定しています。
STRING_AGG関数はSQLServer2007以降で使用できます。








