Oracle에서는 "order by" 절과 함께 listagg 함수를 사용하여 여러 행을 하나의 행으로 변환할 수 있습니다. 이 문은 데이터를 정렬한 다음 정렬된 결과를 함께 연결할 수 있습니다. 구문은 "listagg(열 이름,')입니다. 구분 기호 ') 그룹 내(열 이름순)".
이 튜토리얼의 운영 환경: Windows 10 시스템, Oracle 11g 버전, Dell G3 컴퓨터.
필요에 따라 획득한 조직 아래의 하위 조직을 하나의 데이터 행으로 결합해야 하며, 오라클 자체 기능을 사용합니다
listagg(열 이름 , '구분 기호') 그룹 내(열 이름별 정렬)
즉, 각 그룹 내에서 LISTAGG는 order by 절에 따라 열을 정렬하고 정렬된 결과를 하나로 이어줍니다
제 조직 구조는 트리 구조이고, 다음 SQL은 현재 부서에 속한 모든 하위 부서의 이름을 조회하는 것입니다.
SELECT LISTAGG(O.ORGNAME,',') WITHIN GROUP(ORDER BY LEVEL) FROM ORGANIZATION O START WITH O.ORGID = 1000 CONNECT BY PRIOR O.ORGID = O.PID AND LEVEL<4
참고: 위의 SQL은 트리 구조의 데이터가 어느 수준에 있는지 나타내는 Oracle 키워드 LEVEL을 사용합니다.
위 SQL은 또한 Oracle 트리 쿼리 문 START WITH … CONNECT BY PRIOR …
쿼리가 모두 사용되는 경우 노드의 상위 노드인 경우 위의 START WITH SQL은 다음과 같이 변경되어야 합니다.START WITH O.ORGID = 1000 CONNECT BY PRIOR O.PID = O.ORGID
(PRIOR 이후의 필드는 이전 순서와 동일하지 않습니다.)
ORGANIZATION 테이블 데이터는 다음과 같습니다
ORGID | ORGNAME | PID |
---|---|---|
1000 | 초등학교 | 0 |
1100 | 1학년 | 1000 |
1200 | 2학년 | 1000 |
1101 | 101학년 | 1100학년 |
1102 | 102학년 | 1100 |
1103 | 103학년 | 1100 |
1201 | 201반 | 1200 |
1.LEVEL
SELECT ORGNAME,LEVEL FROM ORGANIZATION START WITH ORGID = 1000 CONNECT BY PRIOR O.ORGID = O.PID
실행 결과는 다음과 같습니다
ORGNAME | LEVEL |
---|---|
초등학교 | 1 |
1학년 | 2 |
2학년 | 2 |
101반 | 3 |
102반 | 3 |
103반 | 3 |
201반 | 3 |
2. LISTAGG...그룹 내에서...
SELECT LISTAGG(O.ORGNAME,',') WITHIN GROUP(ORDER BY LEVEL) FROM ORGANIZATION O
실행 결과는 다음과 같습니다.
초등학교, 1학년, 2학년, 101반, 102반, 103반, 201반
3 상위 노드 아래의 모든 자식 노드를 한 줄에 넣습니다
SELECT LISTAGG(O.ORGNAME,',') WITHIN GROUP(ORDER BY LEVEL) FROM ORGANIZATION O START WITH O.ORGID = 1000 CONNECT BY PRIOR O.ORGID = O.PID AND LEVEL<4
실행. 결과는 다음과 같습니다.
초등학교, 1학년, 2학년, 101반, 102반, 103반, 201반
추천 튜토리얼: "Oracle Video Tutorial"
위 내용은 Oracle에서 여러 줄을 하나로 변환하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!