개인적으로 공부하면서 기록하는 공간으로
잘못된 정보는 댓글을 통해 알려주시면 감사하겠습니다 :-)
▪ ▪ ▪ ▪ ▪
가끔은 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
728x90
728x90