본문 바로가기

[MSSQL] 여러 행을 하나의 문자열로 연결하는 방법

안자매 2022. 5. 23.
반응형


개인적으로 공부하면서 기록하는 공간으로

잘못된 정보는 댓글을 통해 알려주시면 감사하겠습니다 :-)

▪ ▪ ▪ ▪ ▪

 

가끔은 SELECT로 조회하기 보다
OUTPUT을 통해 값을 단일 값을 받아오는 경우가 편리할 때가 있어요.

 

 

여러 행을 하나의 문자열로 연결하는 방법


테스트를 진행하기 위해 임시테이블 생성하기

더보기
CREATE TABLE DBO.#TEMP01 (
	NAME	VARCHAR(10)
,	AGE		INT
)

INSERT INTO #TEMP01 (NAME, AGE)
VALUES 
('KIM' , 40),
('AHN' , 20),
('PARK', 10),
('SHIN', 20),
('LEE' , 30),
('CHA' , 30),
('HEO' , 20)

 

방법 1) STRING_AGG() 함수 사용

-- 형식) STRING_AGG(합칠 대상 컬럼명, 구분자) [WITHIN GROUP(ORDER BY 정렬하고자하는 컬럼명)]

SELECT		AGE			AS [AGE]
,			STRING_AGG(NAME, ',') WITHIN GROUP (ORDER BY NAME)	AS [NAME]
FROM		#TEMP01
GROUP BY	AGE


방법 2) STUFF() 함수와 FOR XML PATH 사용 

-- 형식) STUFF(문자열, 시작위치, 문자길이, 치환문자)

SELECT		AGE			AS [AGE]
,			STUFF((
				SELECT ','+CONVERT(NVARCHAR,NAME)
				FROM #TEMP01
				WHERE AGE   = A.AGE
				FOR XML PATH('')), 1, 1, ''
			)			AS [NAME]
FROM		#TEMP01 AS A
GROUP BY	A.AGE

 

 

Reference

✔ https://gent.tistory.com/344?category=874679 
https://docs.microsoft.com/ko-kr/sql/t-sql/functions/stuff-transact-sql?view=sql-server-ver15
✔ https://docs.microsoft.com/ko-kr/sql/t-sql/functions/string-agg-transact-sql?view=sql-server-ver15

 

 

댓글