2017.12.29
2020.1.7

行データをカンマ区切りの文字列に変換する(FOR XML PATH)

SQL Serverで複数の行データをカンマ区切り(,)の文字列に変換する方法です。仕事で必要になりそうだったので調べてみましたが、最終的にSQLでやる必要はなくなりました。ただ、せっかくなので、メモとして残しておきます。

目次

  • テーブル構成とデータ
  • コード
  • SQLの実行結果

テーブル構成とデータ

今回は、以下のテーブル構成とデータを対象に実行します。

テーブル1「example_tbl」

idkind_idname
11A1
21A2
31A3
42B1
52B2
63C1
73NULL
83NULL
94NULL
104NULL

テーブル2「kind_tbl」

idname
1A
2B
3C
4D

コード

SQLは以下の通りです。


SELECT
id,
kind,
CASE WHEN LEN(comma_name) > 0 THEN
	LEFT(comma_name, charindex(',', comma_name, LEN(comma_name)) - 1)
ELSE
	NULL
END comma_name

FROM
(
	SELECT 
	id,
	name AS kind,
	(
		SELECT name + ','
		FROM example_tbl
		WHERE example_tbl.kind_id = kind_tbl.id
		ORDER BY id
		FOR XML PATH('')
	) AS comma_name

	FROM 
	kind_tbl
) a

上記のSQLでは、サブクエリでカンマ区切りの文字列を生成して、最終的なSELECTの「CASE WHEN ~ THEN」で一番後ろのカンマを削除しています。

SQLの実行結果

上記のSQLを実行した結果は以下の通りです。

idkindcomma_name
1AA1,A2,A3
2BB1,B2
3CC1
4DNULL

SQL Server】関連記事