여러 행의 문자열을 하나의 행으로 결합해서 보여줘야 할 때,
SQL Server에서는 STRING_AGG 함수를 사용할 수 있습니다.
(※SQL Server 2017 이상부터 지원)
▶ STRING_AGG 기본 문법
STRING_AGG (expression, separator)
- expression : 결합할 문자열 컬럼
- separator : 문자열을 구분할 문자 (예: ', ' 또는 ' | ')
저는 한 테이블의 일련번호를 기준으로,
연결된 다른 테이블의 여러 값을 한 줄로 묶어서 보여주고 싶을 때 사용했습니다.
▶ 예시
- 예시 테이블 (ITEM_TABLE)
ORDER_ID | ITEM_NAME |
1 | A |
1 | B |
1 | C |
2 | D |
2 | E |
- SQL 쿼리 예제
SELECT
ord.ORDER_ID,
STRING_AGG(item.ITEM_NAME, ', ') AS ITEM_NAME
FROM ORDER_TABLE ord
LEFT OUTER JOIN ITEM_TABLE item
ON ord.ORDER_ID = item.ORDER_REF_ID
WHERE ord.DEL_YN = 'N' AND item.DEL_YN = 'N'
GROUP BY ord.ORDER_ID;
- 결과 (ORDER_ID를 기준으로 ITEM_NAME들을 묶은 결과)
ORDER_ID | ITEM_NAME |
1 | A,B,C |
2 | D,E |
※
STRING_AGG는 정렬을 보장하지 않아서,
그냥 사용하면 A,B,C나 D,E처럼 순서대로 나오지 않을 수 있습니다.
정렬이 필요한 경우, WITHIN GROUP (ORDER BY ...) 절을 함께 사용해야 합니다.
STRING_AGG(item.ITEM_NAME, ', ')
WITHIN GROUP (ORDER BY item.ITEM_NAME)
'SQL > MSSQL' 카테고리의 다른 글
[MSSQL] 천 단위(,) 숫자 표기 방법 (0) | 2025.06.01 |
---|---|
[iBATIS, MSSQL] INSERT 후 자동 생성된 PK 값 가져오기 (0) | 2025.05.31 |
[MSSQL] 문자열 분리 함수 "STRING_SPLIT" +CROSS APPLY 응용 (SQL server 2016이상) (0) | 2025.05.30 |
[IBATIS] MSSQL 저장 프로시저 호출하기 (2) | 2025.05.29 |