본문 바로가기
Database

SQL Server - 그룹별 행 데이터 병합 / 구분자로 Merge 하기

by soojitasan 2024. 5. 3. 13:03

## 네이버 블로그에 포스팅한 내용 옮겨오기

 

 

SQL Server에서 행 데이터 합치는 법 (구분자로 Merge하는법)

 

 

1. STRING_AGG

SELECT STRING_AGG([Merge할 컬럼명], '구분자')
       WITHIN GROUP(ORDER BY [정렬 컬럼명])    -- 정렬 필요한 경우 WITHIN GROUP절 사용
FROM [테이블명]
GROUP BY [그룹 컬럼명]
-- 예시: Product 테이블에서 ProductName 컬럼을 seq 순서로 정렬 후 |로 구분하여 OrderID별로 합치기
SELECT STRING_AGG(ProductName, '|')
       WITHIN GROUP(ORDER BY seq)    
FROM Product
GROUP BY OrderID

 

 

 

2. FOR XML PATH  

SELECT  [Merge할 컬럼명] + '구분자'  
FROM    [테이블명]
FOR XML PATH('')
-- 예시: Product 테이블에서 ProductName 컬럼을 |로 구분하여 합치기
SELECT  '|' + ProductName
FROM    Product
FOR XML PATH('')

 

  --> FOR XML  PATH 사용 시 WITH절 (CTE) 굳이 쓸 필요 없음.
       WITH절은 Hierarchy 구조에서 사용하자.

 

  --> 저 예시대로 쿼리를 짜면 맨 앞에 | 구분자가 하나 더 나오게 된다!
        STUFF를 활용해서 앞에 삭제해주면 됨.

 

 

 

∴ 정렬 기능이 있고 성능도 더 나은 STRING_AGG를 주로 사용하고,
    FOR XML PATH는 참고용으로만 알아두자 (오래된 구문임).