한 row에 어떠한 column 집합을 연속적으로 연결해서 보여주고 싶을 때가 있다. 특히 데이터를 연결해서 보여줄 때 comma separated list, delimiter를 사용한다. MySQL은 GROUP_CONCAT, Oracle은 LISTAGG, SQL Server는 STRING_AGG를 사용한다. 그러나 string_agg 함수는 sql server 2017부터 지원하는 함수이다. 이전에는 stuff, for xml, path를 사용하여 구현하였다. 대용량이 아닐 경우는 아래와 같이 sqlclr을 사용하면 group concat을 쉽게 구현할 수 있다.
-- dbo.GROUP_CONCAT(VALUE)
-- dbo.GROUP_CONCAT_D(VALUE, DELIMITER)
-- dbo.GROUP_CONCAT_DS(VALUE, DELIMITER, SORT_ORDER)
-- dbo.GROUP_CONCAT_S(VALUE, SORT_ORDER) -- 1:asc, 2:desc
SELECT some_id,
dbo.GROUP_CONCAT(some_column) as delimited_list
FROM dbo.some_table
GROUP BY some_id;