概要
SQLServerに記事本文データが入っているテーブル「article_pages」があったとして、
記事ID
とページ番号
の組み合わせの一覧を、
(記事ID,ページ番号),(記事ID,ページ番号), ・・・
のような形式でカンマ区切りで出力したいときのSQLを作ってみた。
結論
こんなSQLになった。
SQL
SELECT '(' +
REPLACE (
(
SELECT CONVERT(varchar, article_id) + ',' + CONVERT(varchar, page_number) AS [data()]
FROM article_pages
FOR XML PATH ('')
),
' ',
'),('
)
+ ')'
解説
CONVERT(varchar, article_id) + ',' + CONVERT(varchar, page_number)
単に、記事IDとページ番号をカンマで連結して記事ID,ページ番号
という文字列を作成。
article_idやpage_numberがintで保存してあったので、varcharへの変換もしている。
data()
とFOR XML PATH ('')
data()
とFOR XML PATH ('')
の合せ技で、下記のようなデータが取得できる。
SQL
SELECT CONVERT(varchar, article_id) + ',' + CONVERT(varchar, page_number) AS [data()]
FROM article_pages
FOR XML PATH ('')
↓
出力データ("記事ID,ページ番号"がスペース区切りで出力されている)
記事ID,ページ番号 記事ID,ページ番号 記事ID,ページ番号 ・・・
REPLACE
スペース区切りで出力されたデータのスペースを ),(
に置換。
これだけだと出力データの先頭と末尾の括弧が足りないので、SQLの1行目と最終行で '('
と ')'
を付け加えている。