> 데이터 베이스 > MySQL 튜토리얼 > SQL에서 여러 행을 단일 문자열로 연결하는 방법은 무엇입니까?

SQL에서 여러 행을 단일 문자열로 연결하는 방법은 무엇입니까?

Patricia Arquette
풀어 주다: 2025-01-01 12:19:10
원래의
334명이 탐색했습니다.

How to Concatenate Multiple Rows into a Single String in SQL?

ID를 기준으로 값 연결

데이터 조작에서는 여러 행의 데이터를 단일 문자열로 결합해야 하는 경우가 많습니다. 이는 작은 조각들로 문자열을 조합하는 연결을 통해 달성할 수 있습니다.

문제 설명:

두 개의 열이 있는 "Results"라는 테이블이 있습니다. Response_ID' 및 '라벨.' 각 "Response_ID"는 여러 "Label" 값에 해당합니다. 목표는 "Response_ID"당 하나의 행이 있고 모든 "Label" 값이 쉼표로 구분된 단일 문자열로 연결되어 있는 새 테이블을 생성하는 것입니다.

해결책:

"Response_ID"를 기준으로 값을 연결하려면 다음 SQL을 사용할 수 있습니다. 쿼리:

select T1.Response_ID,
       stuff((select ','+T2.Label
              from Results as T2
              where T1.Response_ID = T2.Response_ID
              for xml path(''), type).value('.', 'varchar(max)'), 1, 1, '') as Label
from Results as T1
group by T1.Response_ID
로그인 후 복사

설명:

  • T1.Response_ID: 원본의 "Response_ID" 열 table.
  • Stuff(): 이 함수는 문자열을 연결합니다. 다음 인수를 사용합니다:

    • 연결할 결과 문자열(괄호 안).
    • 연결을 시작해야 하는 결과 문자열의 시작 위치(이 경우 1).
    • 결과 문자열의 시작 부분에서 제거할 하위 문자열의 길이(여기서 1 대소문자).
    • 연결할 문자열입니다.
  • XML 경로: 이 하위 쿼리는 연결 프로세스를 위한 XML 조각을 생성합니다. 각 "레이블" 값은 쉼표로 구분된 XML 요소로 묶입니다.
  • value(): 이 함수는 XML 조각에서 연결된 문자열을 추출합니다.

예:

다음을 고려하세요. table:

Response_ID Label
12147 It was not clear
12458 Did not Understand
12458 Was not resolved
12458 Did not communicate
12586 Spoke too fast
12587 Too slow

위 쿼리는 다음과 같은 출력을 생성합니다.

Response_ID Label
12147 It was not clear
12458 Did not Understand,Was not resolved,Did not communicate
12586 Spoke too fast
12587 Too slow

참고: 연결된 문자열의 순서를 항상 예측할 수 있는 것은 아닙니다. 주문을 정확하게 제어하려면 하위 쿼리에 "ORDER BY" 문을 사용할 수 있습니다.

위 내용은 SQL에서 여러 행을 단일 문자열로 연결하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿