닌자고양이
[SQL] STRING_AGG 대용 본문
결과 집합을 단일 XML 태그 문자열로 반환하는 FOR XML PATH 을 사용하는 편법.
가장 좋은건 사용자 정의 Aggregate 함수를 .NET dll 로 만드는 것인데 잠시 쓸거라면...
다소 복잡한 구문이지만 별도의 확장 작성 없이 SELECT 한줄로 해결하는 유일한 방법이다.
WITH T(col) AS
(
SELECT 'aaa' UNION ALL
SELECT 'bbb' UNION ALL
SELECT 'ccc'
)
SELECT STUFF((SELECT CONCAT(',', col) FROM T FOR XML PATH('')), 1, 1, '')
-- MSSQL 2017 에서는 간단히 다음처럼 사용 가능
-- SELECT STRING_AGG(col, ',') FROM T
CONCAT 으로 모든 값 앞에 구분자 콤마 , 를 앞에 붙인다.
CONCAT 은 숫자형도 자동으로 형변환을 해주므로 + 보다 좋다.
CONCAT 으로 모든 값 앞에 콤마 , 를 붙이므로 최종 문자열에서 맨앞 문자 1개를 STUFF 함수로 지운다.
STUFF 의 세번째 인자 1은 CONCAT 에 넣어준 구분자의 길이다.
구분자를 넣지 않으면 STUFF 는 안해도 되지만 CONCAT('', col) 처럼
'기타 코드' 카테고리의 다른 글
[SQL] WITH 절 (CTE: Common Table Expressions) (0) | 2021.03.07 |
---|---|
[SQL] PIVOT 과 UNPIVOT (0) | 2020.02.12 |
[SQL] 그룹 관계 없이 값의 연속성에 의한 Partitioning (0) | 2020.02.07 |
[SQL] N개 행 생성하기 (0) | 2020.02.07 |
Comments