반응형
MSSQL에서 STUFF 함수를 사용하여 NUM이 같은 NAME끼리 묶어 콤마(,)로 합치는 방법입니다.
쿼리 요약
주어진 데이터에서 NUM이 같은 NAME을 콤마로 연결하여 출력하는 쿼리는 다음과 같습니다:
SELECT X.NUM, X.NAME
FROM (
SELECT A.NUM,
STUFF((SELECT ', ' + NAME
FROM #TEMP
WHERE NUM = A.NUM
FOR XML PATH('')), 1, 2, '') AS NAME
FROM #TEMP AS A
GROUP BY A.NUM
) X
쿼리 설명
- 서브쿼리: STUFF 함수와 FOR XML PATH를 사용하여 NUM이 같은 NAME들을 콤마로 연결합니다.
- FOR XML PATH('')는 결과를 XML 형식으로 반환하여 문자열을 하나로 합치는 데 사용됩니다.
- STUFF 함수:
- STUFF(expression, start, length, replace_expression)에서:
- expression: 합쳐진 문자열.
- start: 문자열에서 삭제를 시작할 위치.
- length: 삭제할 길이.
- replace_expression: 삭제된 위치에 삽입할 문자열.
- 이 쿼리에서는 start가 1, length가 2로 설정되어 콤마와 공백을 제거합니다.
- STUFF(expression, start, length, replace_expression)에서:
STUFF 함수 사용 예
- 첫 번째 예: start=1, length=0
- 결과: 문자열의 가장 앞에 ", "가 붙어 있는 상태입니다.
STUFF((SELECT ', ' + NAME FROM #TEMP WHERE NUM=A.NUM FOR XML PATH('')), 1, 0, '')
- 결과: 문자열의 가장 앞에 ", "가 붙어 있는 상태입니다.
- 두 번째 예: start=1, length=1
- 결과: 가장 첫 번째 문자에서 1자리 삭제하여 콤마(',')가 제거됩니다.
STUFF((SELECT ', ' + NAME FROM #TEMP WHERE NUM=A.NUM FOR XML PATH('')), 1, 1, '')
- 결과: 가장 첫 번째 문자에서 1자리 삭제하여 콤마(',')가 제거됩니다.
- 세 번째 예: start=1, length=2
- 결과: 콤마와 스페이스를 모두 제거한 최종 결과입니다.
STUFF((SELECT ', ' + NAME FROM #TEMP WHERE NUM=A.NUM FOR XML PATH('')), 1, 2, '')
- 결과: 콤마와 스페이스를 모두 제거한 최종 결과입니다.
- 네 번째 예: 문자열 대체
- 결과: 삭제된 부분에 "LIST: "를 삽입합니다.
STUFF((SELECT ', ' + NAME FROM #TEMP WHERE NUM=A.NUM FOR XML PATH('')), 1, 2, '이름: ')
- 결과: 삭제된 부분에 "LIST: "를 삽입합니다.
최종 결과
위 쿼리를 실행하면 NUM별로 NAME이 콤마로 연결된 결과를 얻을 수 있습니다. 예를 들어, 데이터가 다음과 같을 경우:
NUM | NAME |
1 | KIM |
1 | LEE |
2 | PARK |
2 | CHOI |
결과는 다음과 같습니다
NUM | NAME |
1 | 이름: KIM, LEE |
2 | 이름 : PARK, CHOI |
결론
STUFF 함수와 FOR XML PATH를 사용하면 MSSQL에서 문자열을 효과적으로 연결할 수 있습니다.
728x90
반응형
LIST
'마루아라는 개발쟁이 > MS.SQL' 카테고리의 다른 글
DROP IF EXISTIS (0) | 2024.08.22 |
---|---|
text 형식 replace() 사용시 오류 해결방법 (0) | 2024.08.22 |
SQL Server에서 저장 프로시저 내용 검색 (0) | 2024.08.14 |
더 빠른 SQL 쿼리를 위한 21가지 데이터베이스 튜닝 규칙 (0) | 2022.12.06 |
MS-SQL 쿼리를 이용하여 문자열을 배열로 전환하기 (0) | 2022.12.06 |