database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
ㆍOracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
Oracle Q&A 41002 게시물 읽기
No. 41002
계층별 소계(조직도)를 처리할 방법이 있을까요?
작성자
김민규(moonyai)
작성일
2015-11-13 09:51
조회수
9,015

 안녕하세요 계층별 소계(조직도)의 인원수 합계를 추출할 수 있는 방법이 있을까 해서요

인사 업무를 아시는 분은 아시겠지만 조직도 기준 하위 레벨로 여러단계(어디까지 내려갈지 정해져 있지 않음)까지 내려 가는 상황입니다.

이런기준으로 보았을때 해당 조직도 기준의 인원수를 추출할 수 있을까요?

 EX )

영업본부                                                 5명

 

  영업1지점                                             2명 

           영업1팀                                        2명

 

  영업2지점                                             3명

         영업2지점 1조직                           2명

                    영업2지점 1조직 1팀        1명

                    영업2지점 1조직 2팀         1명

         영업2지점  2조직                          1명

                    영업2지점 2조직 1팀         1명

이 글에 대한 댓글이 총 2건 있습니다.

WITH dept AS
(
SELECT 10 dno, '영업본부' dnm, null p_dno FROM dual
UNION ALL SELECT 20, '영업1지점'          , 10 FROM dual
UNION ALL SELECT 40, '영업1팀'            , 20 FROM dual
UNION ALL SELECT 30, '영업2지점'          , 10 FROM dual
UNION ALL SELECT 50, '영업2지점 1조직'    , 30 FROM dual
UNION ALL SELECT 70, '영업2지점 1조직 1팀', 50 FROM dual
UNION ALL SELECT 80, '영업2지점 1조직 2팀', 50 FROM dual
UNION ALL SELECT 60, '영업2지점 2조직'    , 30 FROM dual
UNION ALL SELECT 90, '영업2지점 2조직 1팀', 60 FROM dual
)
, emp AS
(
SELECT 1 eno, 40 dno FROM dual
UNION ALL SELECT 2, 40 FROM dual
UNION ALL SELECT 3, 70 FROM dual
UNION ALL SELECT 4, 80 FROM dual
UNION ALL SELECT 5, 90 FROM dual
)
SELECT a.dnm
     , b.cnt
  FROM (SELECT ROWNUM rn
             , dno
             , LPAD(' ', (LEVEL-1)*4, ' ')||dnm dnm
          FROM dept
         START WITH p_dno IS NULL
         CONNECT BY PRIOR dno = p_dno
        ) a
     , (SELECT r_dno dno
             , COUNT(e.dno) cnt
          FROM (SELECT CONNECT_BY_ROOT dno r_dno
                     , dno
                  FROM dept
                 CONNECT BY PRIOR dno = p_dno
                ) d
             , emp e
         WHERE d.dno = e.dno(+)
         GROUP BY r_dno
        ) b
 WHERE a.dno = b.dno
 ORDER BY rn
;

마농(manon94)님이 2015-11-16 09:17에 작성한 댓글입니다.

마농님 감사합니다. 꾸벅

김민규님이 2015-11-16 10:55에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
41006쿼리좀 도와주세여.. 부탁드립니다. [2]
초보
2015-11-19
8305
41005데이터 한줄 내려서 정렬하기 [3]
민식이
2015-11-16
8599
41004sql connec by 문의하나 할께요. [1]
이현정
2015-11-16
8242
41002계층별 소계(조직도)를 처리할 방법이 있을까요? [2]
김민규
2015-11-13
9015
41001테이블스페이스 관련 질문 드립니다. [1]
검콤이
2015-11-10
8319
41000이 xml 파싱하는 구분 해석좀 도와주세요 [1]
매수신호
2015-11-09
8783
40999컬럼이 증가하는 반복문에 대한 질문입니다. [1]
어푸어푸
2015-11-09
8382
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.019초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다