[SQL Server] 列を CSV として出力する
テーブルをリレーションする際に、ある ID から取得した結果を一行にまとめて結合させたい場合、FOR XML を使う。これにより、結果セットを CSV に整形した結果を一行にまとめて表示させることも可能。
FOR XML は、取得した項目に区切り文字を連結させて使用する。以下は、何も考えないで連結するパターン。値の終端にもカンマが付いてしまっている。
値を [data()] として扱い、一旦スペースに変換してから、スペースを , に変換すると、スマートにな表示になる。
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