縦に並んだ複数行のデータをカンマ区切りで横並びに表示


ITコーディネータのシュウです。

IMG_0402

写真は、前回と同じく「古代蓮の里」で撮った古代蓮の花です。
今年も暑い夏が続くと思えば、大型台風の影響で大雨などもあり、とても変わりやすく難しい天候ですね。台風などでこれ以上被害が出ないことを祈りつつ、天気予報をいつもチェックして注意しないといけないですね。

<本日の題材>
縦に並んだ複数行のデータをカンマ区切りで横並びに表示する方法(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モードで指定し、スペース区切りの文字列を生成しながら、カンマでつなげるというかたちにすると、上記の結果のようになります。
今日は以上まで

にほんブログ村 IT技術ブログへ
にほんブログ村

「縦に並んだ複数行のデータをカンマ区切りで横並びに表示」への4件のフィードバック

  1. 結果を1カラムに横につなげたくて、ここのたどり着きました。
    SQL一本で簡単にできないと思っていましたが、こんな方法があるんですね。
    Stored Procedureでカーソル使って順番に処理して文字列を繋げて・・という方法を考えてましたが、これなら簡単ですね。
    大変役に立ちました!
    ありがとうございます。

    1. 見てくださってありがとうございます。
      少しずつ、記事を載せて行こうと思っていますので、今後とも、よろしくお願いします。

  2. おお!すごい。FOR XML句を初めて知りました。
    求めればどこかに答えがあるものですね。助かりました。

M.H にコメントする コメントをキャンセル

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>