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以降で使用できます。