MSSQL STUFF ( like group_concat at mysql ) -- MSSQL



보통 테이블을 SELECT하면 테이블에 존재하는 레코드 수만큼 반환을 하게 되는데, 때때로 반환한 레코드를 한 줄의 데이터로 변경할 경우가 있다.

예를들면,

one
two
three

테이블의 컬럼 데이터를 one, two, three로 반환하고 싶은 것이다.

이런 경우 MySQL에서는 GROUP_CONCAT(http://tiger5net.egloos.com/5751773)을 사용하는데, MSSQL에서는 STUFF를 사용한다.


[C1] [C2]
one 1
two 2
three 3


위와 같은 테이블이 있다고 한다면 아래와 같이 쿼리를 작성할 수 있다.

SELECT
STUFF((
SELECT ',' + C1 + '|' + C2
FROM Test
ORDER BY C2
FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 1, '')
FROM Test ;



결과)

one|1,two|2,three|3

1 2 3 4 5 6 7 8 9 10 다음



20140817_300_250

통계 위젯 (화이트)

383129
3040
665202