(답변) SYS_CONNECT_BY_PATH 이용 1 5 6,277

by 마농 SYS_CONNECT_BY_PATH [2008.04.11 15:14:55]


SELECT lv
     , pcode_item
     , ccode_item
     , ea
     , TRIM(BOTH ’*’ FROM ea_list) ea_list
     , EXP(SUM(LN(SUBSTR(ea_list,INSTR(ea_list,’*’,1,rn)+1
                                ,INSTR(ea_list,’*’,1,rn+1)-INSTR(ea_list,’*’,1,rn)-1)
                  ))) ea_sum
  FROM (SELECT ROWNUM sort_no
             , LEVEL lv
             , pcode_item
             , ccode_item
             , ea
             , SYS_CONNECT_BY_PATH(ea,’*’)||’*’ ea_list
          FROM t
         START WITH pcode_item = ’A’
         CONNECT BY PRIOR ccode_item = pcode_item
        ) a
     , (SELECT ROWNUM rn
          FROM dual
         CONNECT BY LEVEL <= 10) b
 WHERE lv >= rn
 GROUP BY sort_no
        , lv
        , pcode_item
        , ccode_item
        , ea
        , ea_list

by 최원석 [2008.04.11 17:25:09]
마농님 어떤 제품 안에 어떤 부품이 들어 가는지 총누적소요량만 나오게 하는 것이 더 힘들까요?
중복 부품까지 다 합산해서 레벨 없이 표현하는 것이요.
A 제품 - B 부품 - 총 누적소요량
A 제품 - C 부품 - 총 누적소요량 등등등

by 마농 [2008.04.11 17:29:29]
SELECT 'A', ccode_item, SUM(ea_sum)
FROM (위쿼리)
GROUP BY ccode_item

by 최원석 [2008.04.11 17:58:09]
마농님 멋쟁이~
오라클 유지보수 업체에 일하시는지? @.@
암튼 경악을 금치 못하고 있습니다.

by 최원석 [2008.04.13 22:49:33]
SELECT ROWNUM rn
FROM dual
CONNECT BY LEVEL <= 10

라는게 샘플 데이터로 정전개했을때 10줄 나와서 이렇게 적으신건가요?

by 마농 [2008.04.14 09:45:54]
샘플데이터 수와는 상관 없습니다.
최대 레벨 깊이보다 큰수를 적어주셔야 합니다.
a 데이터의 각 행을 lv 만큼 복제하기 위한 자료입니다.(WHERE lv >= rn)
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입