Dancing Robot

여러 행의 문자열을 하나의 행으로 결합해서 보여줘야 할 때,
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)

 

 

 

 

+ Recent posts