SQLServerでカンマ区切り (CSV) で文字列取得

記事内に広告が含まれています。

Where句のINにSQLで取得した結果を直接利用したりするのに、SQLServerで複数件存在するデータを1行のカンマ区切りのデータとして取得して見ます。

SQLの取得結果をカンマ区切りで取得

Where句のINにSQLで取得した結果を直接利用したりするのに、SQLServerで複数件存在するデータを1行のカンマ区切りのデータとして取得して見ます。
(残念ですがOracleやMySQLなどではこの方法は通用しません。)

取得

カンマ区切りで取得するには列名を「data()」にすることでアトミック値として処理し、その結果を「FOR XML PATH」を利用して細工します。

CREATE TABLE test_table
(
     no   SMALLINT
    ,name VARCHAR(20)
)
INSERT INTO test_table VALUES( 1,'太郎さん' )
INSERT INTO test_table VALUES( 2,'次郎さん' )
INSERT INTO test_table VALUES( 3,'三郎さん' )

SELECT REPLACE(
    ( SELECT
          name AS [data()] 
      FROM
          test_table
      FOR XML PATH ('')), ' ', ',') AS RESULT

取得結果

RESULT
太郎さん,次郎さん,三郎さん

取得した結果でカンマ区切り (CSV)ファイルを作成するには便利です。

補足

カラムに付けている別名「data()」ですが、
パスを data() として指定した列の名前を参照すると


列名として指定したパスが “data()” の場合、生成されるXMLでは列の値がアトミック値として処理されます。

とあり、「data()」を他の名称「aaa()」のように変えると

RESULT
太郎さん
次郎さん
三郎さん

のように普通に取得してしまいます。

不可分操作 - Wikipedia

不可分操作(ふかぶんそうさ)あるいはアトミック操作 (Atomic Operation) とは、情報工学においていくつかの操作を組み合わせたもので、システムの他の部分から見てそれらがひとつの操作に見えるものをいう。


と言うことで、SELECT結果が複数件あっても1つの操作の結果に見えると。

う~ん、難しい。

スポンサーリンク
スポンサーリンク
【PR】
SQL学習におすすめの本
SQL Server
スポンサーリンク
ソフトウェア開発日記
タイトルとURLをコピーしました