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 중국어 웹사이트의 기타 관련 기사를 참조하세요!