Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

닌자고양이

[SQL] STRING_AGG 대용 본문

기타 코드

[SQL] STRING_AGG 대용

닌자고양이 2020. 2. 8. 13:49

결과 집합을 단일 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) 처럼 

 

Comments