SQL Server 2017 이상의 버전에서는 여러 행의 컬럼 값을 하나의 컬럼으로 합칠 때에는 STRING_AGG() 함수를 사용하면 된다. 오라클 SQL의 LISTAGG() 함수와 비슷한 기능을 수행한다.
SQL Server 2017 이전 버전을 사용한다면 FOR XML PATH 서브 쿼리를 사용해야 한다. |
STRING_AGG 함수는 GROUP BY 절과 함께 사용해야 한다. ORDER BY 절을 사용하여 정렬이 가능하며 ORDER BY 절은 생략할 수 있다.
STRING_AGG("합칠컬럼명", "구분자") WITHIN GROUP(ORDER BY "컬럼명") |
기본 사용법
SELECT job
, STRING_AGG(ename, ',') enames
FROM emp
WHERE job IN ('MANAGER', 'SALESMAN')
GROUP BY job
컬럼 값을 정렬하여 합치는 방법
SELECT job
, STRING_AGG(ename, ',') WITHIN GROUP(ORDER BY ename) enames
FROM emp
WHERE job IN ('MANAGER', 'SALESMAN')
GROUP BY job
사용 예제