Pages

2014/11/18

[SQL Server] 列を CSV として出力する

テーブルをリレーションする際に、ある ID から取得した結果を一行にまとめて結合させたい場合、FOR XML を使う。これにより、結果セットを CSV に整形した結果を一行にまとめて表示させることも可能。

Classes

Students

FOR XML は、取得した項目に区切り文字を連結させて使用する。以下は、何も考えないで連結するパターン。値の終端にもカンマが付いてしまっている。
SELECT
 C.Code AS クラスコード
 ,C.Name AS クラス名
 ,(SELECT S.FirstName + ',' FROM Students AS S WHERE S.ClassCode = C.Code FOR XML PATH('')) AS メンバー
FROM Classes AS C

値を [data()] として扱い、一旦スペースに変換してから、スペースを , に変換すると、スマートにな表示になる。
SELECT
 C.Code AS クラスコード
 ,C.Name AS クラス名
 ,REPLACE(
  (SELECT S.FirstName AS [data()] FROM Students AS S WHERE S.ClassCode = C.Code FOR XML PATH('')), ' ', ',') AS メンバー
FROM Classes AS C
Related Posts Plugin for WordPress, Blogger...