縦に並んだ複数行のデータをカンマ区切りで横並びに表示
ITコーディネータのシュウです。
写真は、前回と同じく「古代蓮の里」で撮った古代蓮の花です。
 今年も暑い夏が続くと思えば、大型台風の影響で大雨などもあり、とても変わりやすく難しい天候ですね。台風などでこれ以上被害が出ないことを祈りつつ、天気予報をいつもチェックして注意しないといけないですね。
<本日の題材>
縦に並んだ複数行のデータをカンマ区切りで横並びに表示する方法(SQL Server)
縦に並んだ複数行のデータを、カンマ区切りで横並びに表示する方法について、最近SQL Serverで確認したので、忘れないようにアップしておきます。
 SQL Serverでは、SQLクエリにFOR XML句というものを使うことで、SQLクエリの結果をXML形式で取得することができるのですが、今回はそれを使ってみる方法です。
例えば、地方とその地方に属する都道府県を、それぞれ、地域マスタ、府県マスタということで、下記のように持たせてみます。
SELECT * FROM dbo.地域マスタ
 ORDER BY 地域CD;

SELECT * FROM dbo.府県マスタ
 ORDER BY 府県CD;

… 続きは省略
ここで、上記の地域ごとの都道府県の情報を、カンマ区切りで横並びに表示させたいときに、以下のようにすると可能です。
SELECT
 A.地域CD
 , A.地域名
 ,(SELECT都道府県名 + ',’
 FROM dbo.府県マスタ
 WHERE 地域CD = A.地域CD
 ORDER BY 府県CD
 FOR XML PATH(")) AS 都道府県名
 FROM dbo.地域マスタ A
 ORDER BY A.地域CD
 ;

FOR XML句をPATHモードで指定し、スペース区切りの文字列を生成しながら、カンマでつなげるというかたちにすると、上記の結果のようになります。
 今日は以上まで



ディスカッション
コメント一覧
結果を1カラムに横につなげたくて、ここのたどり着きました。
SQL一本で簡単にできないと思っていましたが、こんな方法があるんですね。
Stored Procedureでカーソル使って順番に処理して文字列を繋げて・・という方法を考えてましたが、これなら簡単ですね。
大変役に立ちました!
ありがとうございます。
見てくださってありがとうございます。
少しずつ、記事を載せて行こうと思っていますので、今後とも、よろしくお願いします。
まさにやりたいことがこれでした。
おお!すごい。FOR XML句を初めて知りました。
求めればどこかに答えがあるものですね。助かりました。