그룹별 ROW(행) 문자열 결과 합치기 (STUFF, FOR XML PATH 활용)
포스팅 개요
오늘 포스팅 예제 쿼리는 검색한 테이블의 ROW(행) 문자열의 결과를 원하는 방식으로 합쳐서 표기하는 방법입니다. 다만 사용되는 구문의 의미는 이해하기가 어려우니 규칙성을 인지하여 상황에 맞게 대응하는 것이 좋습니다.
- 예제 쿼리의 STUFF는 MSDN에서는 "다른 문자열에 문자열을 삽입합니다"라고 정의되어 있습니다.
- 예제 쿼리의 FOR XML PATH는 MSDN에서 "SELCT 결과를 XML 형태로 반환하는 FOR XML문의 PATH 모드"라고 정의 되어있습니다.
- 이제 예제 쿼리를 확인하기 전 아래의 그림을 참고하여 테스트 결과를 미리 확인해 보시길 바랍니다.
예제 쿼리
지난 포스팅에서 사용한 TEST 테이블을 그대로 사용하겠습니다.
2023.01.02 - [DataBase/MS-SQL] - [MSSQL] 중복 테이블 삭제 후에 다시 테이블 생성(CREATE)하기
예제(1) TEST 테이블을 이용하여 일자별 구매품을 콤마(,)로 구분하여 나열합니다.
-- 일자별 구매내역
SELECT
[In_Date] '구매일자',
STUFF((SELECT DISTINCT ',' + [Stock] FROM Test_Table t2
WHERE t1.[In_Date] = t2.[In_Date] FOR XML PATH('')),1,1,'') '구매내역'
FROM Test_Table t1
GROUP BY [In_Date]
예제(2) TEST 테이블을 이용하여 사원별 구매품을 콤마(,)로 구분하여 나열합니다.
-- 사원별 구매내역
SELECT
[Employee] '사원',
STUFF((SELECT DISTINCT ',' + [Stock] FROM Test_Table t2
WHERE t1.[Employee] = t2.[Employee] FOR XML PATH('')),1,1,'') '구매내역'
FROM Test_Table t1
GROUP BY [Employee]
실행 결과
테이블 생성부터 각 쿼리에 맞는 결과를 표기합니다. 필요에 따라 컬럼과 그룹을 조정하는 활용이 가능합니다
참고 링크
'DataBase > MS-SQL' 카테고리의 다른 글
[MS-SQL] 문자열에서 숫자만 추출하기 (스칼라 반환 함수) (0) | 2023.01.13 |
---|---|
[MS-SQL] 서브 쿼리 검색 조건 'WHERE EXISTS' 절의 구조와 활용 (0) | 2023.01.12 |
[MS-SQL] 특정 컬럼에서 소수점이 존재하는 레코드 조회하기 (0) | 2023.01.05 |
[MS-SQL] Create Table 생략하고 임시 테이블 생성 (Select Into) (0) | 2023.01.04 |
[MS-SQL] 중복 테이블 삭제 후에 다시 테이블 생성(CREATE)하기 (0) | 2023.01.02 |
[MS-SQL] 다중 레코드 INSERT 하기 (0) | 2022.12.24 |
[MS-SQL] DB 로그삭제(파일축소) - Version 4 일괄적용 (0) | 2022.12.23 |
[MS-SQL] DB 로그삭제(파일축소) - Version 3 단일적용(간단2) (0) | 2022.12.22 |
댓글