LoginSignup
11
0

More than 5 years have passed since last update.

【SQLServer】(記事ID,ページ番号),(記事ID,ページ番号), ・・・のように組み合わせデータをカンマ区切りで出力するSQL

Last updated at Posted at 2017-12-03

概要

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行目と最終行で '('')' を付け加えている。

11
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
0