>데이터 베이스 >MySQL 튜토리얼 >LISTAGG를 사용하여 Oracle에서 여러 행을 단일 행으로 연결하는 방법은 무엇입니까?

LISTAGG를 사용하여 Oracle에서 여러 행을 단일 행으로 연결하는 방법은 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2025-01-06 03:11:38630검색

How to Concatenate Multiple Rows into a Single Row in Oracle Using LISTAGG?

Oracle에서 여러 행을 단일 행으로 연결

Oracle에서 저장 프로시저를 사용하지 않고 여러 행을 단일 행으로 연결하려면 Oracle 사용자는 LISTAGG 절을 사용할 수 있습니다. 이 절을 사용하면 지정된 구분 기호를 기반으로 효율적인 행 통합이 가능합니다.

데이터 시나리오:

다음 데이터를 고려하세요.

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

원하는 출력:

원하는 결과는 다음과 같습니다. 각 질문 ID에 대한 element_id 값을 연결하여 결과는 다음과 같습니다.

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

LISTAGG를 사용한 솔루션:

Oracle 11gR2부터 LISTAGG 절을 사용하여 다음을 달성할 수 있습니다. 이 연결:

SELECT question_id,
       LISTAGG(element_id, ',') WITHIN GROUP (ORDER BY element_id)
FROM YOUR_TABLE
GROUP BY question_id;

이 쿼리는 다음을 사용합니다. 질문 ID로 정의된 각 그룹 내에서 element_id 값을 연결하는 LISTAGG 함수입니다. ORDER BY 절을 사용하면 연결하기 전에 각 그룹 내에서 값이 정렬됩니다.

오버플로 처리:

연결된 결과 문자열이 허용되는 최대 길이를 초과하는 경우 주의하세요. 데이터 유형(예: VARCHAR2의 경우 4000자), Oracle 버전 12cR2 이상에서는 처리할 수 있는 옵션을 제공합니다. Overflow.

SELECT question_id,
       LISTAGG(element_id, ',') WITHIN GROUP (ORDER BY element_id) OVERFLOW TRUNCATE/ERROR
FROM YOUR_TABLE
GROUP BY question_id;

이 쿼리는 ON OVERFLOW TRUNCATE/ERROR 절을 지정하여 결과가 최대 길이를 초과하는 경우 자르거나 오류를 발생시킵니다.

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

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.