일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- grid
- php5
- rac
- cygwin
- oracle install
- sqlplus
- Unix
- perl string
- 오라클
- solaris
- Network
- bash
- Oracle RAC
- solaris network
- MySQL
- PERL
- prompt
- Linux
- RHEL4
- perl + 정규표현식
- mariaDB
- memory
- command & perl
- oracle
- fdisk
- perl one-liner
- SQL
- patch
- 연산자
- dba
Archives
- Today
- Total
DATA 전문가로 가는 길
[SQL] Oracle 결재 신청된 결재자 리스트와 최종 결재자 조회(MAX 분석 함수 KEEP 활용) 본문
Data Architecture/SQL Query
[SQL] Oracle 결재 신청된 결재자 리스트와 최종 결재자 조회(MAX 분석 함수 KEEP 활용)
EstenPark 2016. 5. 19. 16:43결재와 결재자(승인자) 정보가 담겨져 있는 데이터 이며, 최종 결재자(승인자)를 뽑으려고 하는 규칙은 NULL 값이 아니고, APV_APPNUM 숫자가 높은 데이터를 뽑으면 됩니다.
즉, 최종 결재자는 결재 승인에 대한 코멘트를 반드시 남긴다는 규칙을 만들고, 조회 쿼리를 작성해야 합니다.
그리고 최종 결과에 APV_APPROVER 컬럼의 결재자 리스트는 결재 별로 APV_APPNUM 컬럼을 기준으로 오름차순으로 표현 합니다. (예 : estenpark, evanlee, kidonghong)
CREATE TABLE EST_APV ( APV_ID VARCHAR2(60 BYTE), APV_CNT NUMBER(2), APV_APPNUM NUMBER(2), APV_APPROVER VARCHAR2(60 BYTE), APV_DATE DATE, APV_COMMENTS VARCHAR2(4000 BYTE) ) ;
Insert into EST_APV (APV_ID, APV_CNT, APV_APPNUM, APV_APPROVER, APV_DATE, APV_COMMENTS) Values ('APV10000', 3, 1, 'estenpark', TO_DATE('05/18/2016 16:48:55', 'MM/DD/YYYY HH24:MI:SS'), 'TEST'); Insert into EST_APV (APV_ID, APV_CNT, APV_APPNUM, APV_APPROVER, APV_DATE, APV_COMMENTS) Values ('APV10000', 3, 2, 'evanlee', TO_DATE('05/18/2016 16:48:56', 'MM/DD/YYYY HH24:MI:SS'), 'TEST'); Insert into EST_APV (APV_ID, APV_CNT, APV_APPNUM, APV_APPROVER, APV_DATE) Values ('APV10000', 3, 3, 'kidonghong', TO_DATE('05/18/2016 17:23:33', 'MM/DD/YYYY HH24:MI:SS')); Insert into EST_APV (APV_ID, APV_CNT, APV_APPNUM, APV_APPROVER, APV_DATE, APV_COMMENTS) Values ('APV10001', 3, 1, 'estenpark', TO_DATE('05/19/2016 10:44:39', 'MM/DD/YYYY HH24:MI:SS'), 'TEST'); Insert into EST_APV (APV_ID, APV_CNT, APV_APPNUM, APV_APPROVER, APV_DATE, APV_COMMENTS) Values ('APV10001', 3, 2, 'evanlee', TO_DATE('05/19/2016 10:44:41', 'MM/DD/YYYY HH24:MI:SS'), 'TEST'); Insert into EST_APV (APV_ID, APV_CNT, APV_APPNUM, APV_APPROVER, APV_DATE) Values ('APV10001', 3, 3, 'seocha', TO_DATE('05/19/2016 10:44:42', 'MM/DD/YYYY HH24:MI:SS')); Insert into EST_APV (APV_ID, APV_CNT, APV_APPNUM, APV_APPROVER, APV_DATE, APV_COMMENTS) Values ('APV10002', 3, 1, 'seocha', TO_DATE('05/19/2016 10:50:54', 'MM/DD/YYYY HH24:MI:SS'), 'TEST'); Insert into EST_APV (APV_ID, APV_CNT, APV_APPNUM, APV_APPROVER, APV_DATE, APV_COMMENTS) Values ('APV10002', 3, 2, 'estenpark', TO_DATE('05/19/2016 10:50:56', 'MM/DD/YYYY HH24:MI:SS'), 'TEST'); Insert into EST_APV (APV_ID, APV_CNT, APV_APPNUM, APV_APPROVER, APV_DATE) Values ('APV10002', 3, 3, 'evanlee', TO_DATE('05/19/2016 10:50:57', 'MM/DD/YYYY HH24:MI:SS')); Insert into EST_APV (APV_ID, APV_CNT, APV_APPNUM, APV_APPROVER, APV_DATE, APV_COMMENTS) Values ('APV10003', 4, 1, 'seocha', TO_DATE('05/19/2016 10:52:29', 'MM/DD/YYYY HH24:MI:SS'), 'TEST'); Insert into EST_APV (APV_ID, APV_CNT, APV_APPNUM, APV_APPROVER, APV_DATE, APV_COMMENTS) Values ('APV10003', 4, 2, 'soul1004', TO_DATE('05/19/2016 10:52:31', 'MM/DD/YYYY HH24:MI:SS'), 'TEST'); Insert into EST_APV (APV_ID, APV_CNT, APV_APPNUM, APV_APPROVER, APV_DATE) Values ('APV10003', 4, 3, 'estenpark', TO_DATE('05/19/2016 10:52:32', 'MM/DD/YYYY HH24:MI:SS')); Insert into EST_APV (APV_ID, APV_CNT, APV_APPNUM, APV_APPROVER, APV_DATE) Values ('APV10003', 4, 4, 'evenlee', TO_DATE('05/19/2016 10:52:33', 'MM/DD/YYYY HH24:MI:SS')); COMMIT;
3. MAX 분석 함수와 KEEP를 활용해서 쿼리 작성
SELECT A.APV_ID ,LISTAGG(A.APV_APPROVER, ', ') WITHIN GROUP (ORDER BY A.APV_APPNUM) AS APV_USER_ID ,MAX(A.APV_APPROVER) KEEP (DENSE_RANK FIRST ORDER BY CASE WHEN A.APV_COMMENTS IS NULL THEN 0 ELSE 1 END DESC ,APV_APPNUM DESC) AS LAST_APPROVER FROM EST_APV A GROUP BY A.APV_ID ;
4. 최종 결과
'Data Architecture > SQL Query' 카테고리의 다른 글
[SQL] Oracle 자동 테이블 레이아웃 만들기(Tablelayout, 테이블 정의서) (0) | 2016.06.03 |
---|---|
[SQL] Oracle 구분자 행, 열, 분리, 자르기(REGEXP_SUBSTR, REGEXP_COUNT) (6) | 2016.06.02 |
[SQL] Oracle 선분이력 테이블 조회 방법(MAX 분석 함수, WITH 절, MODEL 절) (0) | 2016.05.18 |
[SQL] Oracle LISTAGG, XMLAGG(XMLELEMENT) 해결 되지 않는 문자열 큰 데이터 병합 하는 방법(STRAGG->CLOB, XMLAGG().GETCLOBVAL) (4) | 2016.04.22 |
[SQL] MariaDB/Mysql 문자열 파싱 방법(POSITION, SUBSTR) (0) | 2016.03.14 |
Comments