複数行をまとめて1行に表示する方法
とりあえずデータを適当に準備
schedule_id report_id report_name
1 001 テスト1
1 002 テスト2
1 003 テスト3
2 001 テスト1
3 004 テスト4
FOR XML PATHを利用して、こんな感じのSQLを作成
SELECT schedule_id,
REPLACE((
SELECT report_name AS [data()]
FROM t_report
WHERE A.schedule_id = schedule_id
FOR XML PATH('')
),' ',',') AS report_name
FROM t_report A
GROUP BY schedule_id
注意点として「t_report」にはエイリアスをつけておかないといけない。
WHERE A.schedule_id = schedule_id
を
WHERE t_report .schedule_id = schedule_id
では思った結果が取れなかった。
空白区切りになるのでREPLACEを利用して「,」区切りへ
結果はこんな感じ
1 テスト1,テスト2,テスト3
2 テスト1
3 テスト4
AS [data()]とすることでXML のエレメントを生成させないようにできる。
AS [data()] を AS report_nameとかにしてみると
こんな感じの結果が返ってくる。
1 <report_name>テスト1</report_name><report_name>テスト2</report_name><report_name>テスト3</report_name>
2 <report_name>テスト1</report_name>
3 <report_name>テスト4</report_name>