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()] ってのがアトミック値にするっていうことらしいがよくわからんかった。
(分解できないとか、処理速度が速いとか書いてあったけど、結局よくわからん・・・)