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 33164 게시물 읽기
No. 33164
트리구조에서 각 동일레벨간 비중에 따른 추진률 산정.......
작성자
노지훈(nozisim)
작성일
2008-03-03 15:50
조회수
2,932

 

테이블구조 뷰형태
업무명 업무코드 상위업무코드 가중치 최종노드 추진률 열1 열2 열3 열4 열5 열6
정원가꾸기 1 0 60     트리구조       업무비중 추진률
방청소하기 2 0 40     정원가꾸기 우물만들기 우물파기   ?
우물만들기 3 1 20           물채우기    
우물파기 4 3 30 y         고기넣기    
물채우기 5 3 30 y       나무심기 나무사기    
고기넣기 6 3 40 y         잡초뽑기    
나무심기 7 1 80           물주기    
나무사기 8 7 20 y     방청소하기 쓸기     ?
잡초뽑기 9 7 50 y       닦기      
물주기 10 7 50 y       쓰레기비우기 봉투사기    
      분리수거하기    




안녕하세요..

tree 구조로 업무단위를 저장하도록 되어있는 상황에서 해결되지 않는 문제가 있어 글을 등록합니다..

식견있으신 분들의 많은 조언 부탁드립니다.

일반적인 상황일수도 있겠는데요.. 처음 접해보는 부분이라 쉽게 혹은 간결하게 해결이 안되고 있습니다...

보시는 바와 같이
테이블 구조와 사용자가 보는 뷰는 위와 같습니다..

근데 업무의 전체 추진률 혹은 각 노드(중간,혹은 말단)의 추진률을 쿼리를 통해서 가져올려고합니다...

connect by 구문을 연구하고 문서나 자료를 찾아봐도 좀처럼 해결이 안되네요..

웹에서 구현이 되기 때문에 성능에도 신경이 좀 쓰입니다..

유사한 사례나 글 있으면 조언 부탁드립니다...

코딩한 sql은 하두 허접해서 올리지도 못하겠요 ^^;;

다 웹 스크립트로 처리한거라.. ㅜㅜ 

이 글에 대한 댓글이 총 4건 있습니다.
SELECT LPAD ( 업무명, LEVEL * 12, ' ' ), ADD_ FROM (
    SELECT RATIO_TO_REPORT( 가중치 ) OVER( PARTITION BY 상위업무코드 ) ADD_, A.* FROM (

.....
CONNECT BY PRIOR 업무코드 = 상위업무코드
START WITH 상위업무코드 = 0

질문 의도를 정확히 이해하지 못해서 이렇게 작성을 해봤는데 맞는진 잘 모르겠네요
채용근(taiji97)님이 2008-03-03 16:24에 작성한 댓글입니다.

ratio_to_report 란 함수가 있다는것을 일깨워주셔서 감사드립니다.... ^^;;


제가 그 키워드로 검색을 해나가보니까.

http://www.soqool.com/servlet/board?cmd=view&cat=100&subcat=1010&seq=83#1264

위의 글이 있는데요.. 상황은 비슷한데..

connect by로 트리 확장된 구조내에서 서브노드들의 총 추진률이 나와야한다는것이 좀 다른것같습니다.

서브노드들의 레벨도 각각 다를수가 있구요..


조언 감사드리구요 ^^; 더 찾아봐야겠습니다.

노지훈(nozisim)님이 2008-03-03 17:03에 작성한 댓글입니다.

기존에 했었던 쿼리 한개 올려드립니다. 도움이 되실꺼 같아서 ( 서브노드 총 추진율 )

WITH A AS (
    SELECT '400000' MCODE,        '000000' PMCODE,          0 CNT,            0 AMOUNT FROM DUAL UNION ALL
    SELECT '410000',        '400000',          0  ,           0 FROM DUAL UNION ALL
    SELECT '411000',        '410000',          146,         100 FROM DUAL UNION ALL
    SELECT '420000',        '400000',          0  ,           0 FROM DUAL UNION ALL
    SELECT '421000',        '420000',          0  ,           30 FROM DUAL UNION ALL
    SELECT '422000',        '420000',          89 ,           20 FROM DUAL UNION ALL
    SELECT '423000',        '420000',          8  ,           50 FROM DUAL UNION ALL
    SELECT '424000',        '420000',          26 ,           30 FROM DUAL
)
SELECT MCODE1, MCODE, PMCODE, CNT, AMOUNT
       ,( SELECT SUM(CNT) FROM A START WITH MCODE = TEST.MCODE CONNECT BY PRIOR MCODE = PMCODE ) SUM_CNT
    ,( SELECT SUM(AMOUNT) FROM A START WITH MCODE = TEST.MCODE CONNECT BY PRIOR MCODE = PMCODE ) SUM_AMOUNT   
FROM (
    SELECT LEVEL LV, LPAD( MCODE , LEVEL * 6,' ' ) MCODE1, MCODE, PMCODE, CNT, AMOUNT
 , RATIO_TO_REPORT( MCODE ) OVER( PARTITION BY LEVEL )
    FROM A
    CONNECT BY PRIOR MCODE = PMCODE
    START WITH MCODE = '400000'
) TEST

채용근(taiji97)님이 2008-03-03 17:09에 작성한 댓글입니다.


앗. 친절하신 도움 감사드립니다.

덕문에 모르던것도 알게되고 문제도 거의다 해결되었습니다 . ^^ 감사합니다.!
노지훈(nozisim)님이 2008-03-03 21:20에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
33167초보입니다. [2]
혀니
2008-03-04
1268
33166[질문]아우터 조인 관련 질문입니다 [1]
급질문
2008-03-04
1558
33165oracle 10g client 와 OraOLEDB....
이소미
2008-03-03
1473
33164트리구조에서 각 동일레벨간 비중에 따른 추진률 산정....... [4]
노지훈
2008-03-03
2932
33163차집합 관련 쿼리 질문입니다..ㅠㅠ [2]
db초보
2008-03-03
1792
33162쉽게 쿼리하는 방법을 알고 싶습니다. [1]
박명수
2008-03-03
1963
33161Oracle SQL Developer 관련 질문.. [1]
최영일
2008-03-03
5164
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.021초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다