2014-08-01
SQLServer覚書 縦→横 (FOR XML)
SQLServerで縦並びになっているデータを横並び(カンマ区切り)にして出力したくなった。
【TABLE1】
CD | KOMOKU
1 | A
1 | B
2 | C
2 | D
【TABLE2】
CD | CNAME
1 | あ
2 | い
ってあった場合、
CD | CNAME | KOMOKU
1 | あ | A,B
2 | い | C,D
って出したい!ってことで、調べた結果、
select TABLE2.* ,replace((select KOMOKU AS [data()] from TABLE1 where (TABLE1.CD=TABLE2.CD) for xml path('') ),' ',',') AS KOMOKU from TABLE2
ってな感じに記述するとのこと。
KOMOKUにスペースが含まれているとこれってうまくいかないんだよねぇ・・・とか思いつつ、自分の場合は特に問題なかったのでOK。
[data()] ってのがアトミック値にするっていうことらしいがよくわからんかった。
(分解できないとか、処理速度が速いとか書いてあったけど、結局よくわからん・・・)