> 데이터 베이스 > MySQL 튜토리얼 > Oracle SQL에서 여러 행을 단일 행으로 효율적으로 연결하려면 어떻게 해야 합니까?

Oracle SQL에서 여러 행을 단일 행으로 효율적으로 연결하려면 어떻게 해야 합니까?

Susan Sarandon
풀어 주다: 2025-01-05 13:32:40
원래의
1025명이 탐색했습니다.

How Can I Efficiently Concatenate Multiple Rows into a Single Row in Oracle SQL?

Oracle의 데이터 조작: 여러 행을 하나로 연결

Oracle에서는 여러 행을 단일 행으로 효율적으로 연결하는 것이 바람직한 작업인 경우가 많습니다. 이 질문은 테이블에 다음 형식의 데이터가 포함된 특정 시나리오에 대해 자세히 설명합니다.

question_id element_id
1 7
1 8
2 9
3 10
3 11
3 12

목표는 이 데이터를 다음과 같은 원하는 결과로 변환하는 것입니다.

question_id element_id
1 7,8
2 9
3 10,11,12

수행하려면 저장 프로시저를 사용하지 않고도 이 작업을 효과적으로 수행하기 위해 Oracle 11gR2에서는 LISTAGG 절을 도입했습니다. 이 놀라운 절을 사용하면 단일 SQL 문 내에서 이러한 연결 작업을 직접 수행할 수 있습니다.

Oracle 쿼리에서 이를 구현하는 방법은 다음과 같습니다.

SELECT question_id,
       LISTAGG(element_id, ',') WITHIN GROUP (ORDER BY element_id)
FROM YOUR_TABLE
GROUP BY question_id;
로그인 후 복사

LISTAGG 절은 다음 형식을 사용합니다. :

LISTAGG(expression, delimiter) WITHIN GROUP (ORDER BY expression)
로그인 후 복사

이 경우 "element_id" 열을 표현식으로 지정하고 ","를 구분 기호로 지정합니다. 연결된 값을 분리합니다. WITHIN GROUP 절은 "question_id" 열로 정의된 각 그룹 내에서 연결이 수행되도록 보장합니다.

연결된 결과 문자열이 VARCHAR2 데이터 유형의 최대 길이 제한을 초과할 수 있다는 점에 유의할 가치가 있습니다( 4000자). 이러한 잠재적인 문제를 해결하기 위해 Oracle 12cR2에서는 ON OVERFLOW TRUNCATE/ERROR 옵션을 도입했습니다. 이 옵션을 통합하면 문자열을 자르거나 길이 제한을 초과하는 경우 오류를 발생시킬지 지정할 수 있습니다.

위 내용은 Oracle SQL에서 여러 행을 단일 행으로 효율적으로 연결하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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