BOM 전개시 적용시점 체크하려고 하는데 0 4 1,748

by 최원석 [2008.04.04 21:59:47]


안녕하세요?

CONNECT BY로 이래저래 검색 많이 해봤는데 잘 몰라서 글 씁니다.

(PARENT) - (CHILD) - (시작일) 관계로 테이블이 있습니다.

M-A 20080401

A-a 20000101

A-b 20000101

M-B 20000101

 

이론적으로 생각하면 2008년 2월 1일자로 조회하면

M-B 만 나타나야 될텐데

실제로 조회해보면

A-a
A-b
M-B

3가지가 나타납니다.

select level cnt1,
                pcode_item,
                ccode_item,
                ea,
                scrap_qty,
                line_code,
                chul_type
           from biz01.tbl_bom
         WHERE  '20080201' BETWEEN S_DATE AND E_DATE
         start with pcode_item = 'XXXXXXXXXX'
         connect by pcode_item = prior ccode_item

PARENT가 해당 시점이 아니라면 그 아래로는 전개되지 않도록 할 방법 없을까요?

START WITH를 먼저 수행하고 CONNECT BY를 수행하고 WHERE절을 수행한다고 들었습니다.

WHERE 절은 전개가 끝난 뒤에 체크를 해서 저런 결과가 나오는 것 같습니다.

다른 방법이 없을까요?

답변해주시면 매우 감사하겠습니다.

by 문동섭 [2008.04.05 14:44:10]
CONNECT BY아래에 조건을 주시면 됩니다.

CONNECT BY .....
AND ... (이 조건에 맞지 않으면 전개가 되지 않습니다.)

by 최원석 [2008.04.05 18:58:04]
문동섭님 사막에 오아시스와 같은 꼬리말을 적어 주셨습니다.

번거롭겠지만, 추가질문인데...

해보니까 1레벨에서는 조건을 만족하지 못하더라도 전개를 하는 것으로 확인되었습니다.

connect by pcode_item = prior ccode_item
and s_date < '20080331';

1레벨에 (PARENT) - (CHILD) - (20080401) 이 나오는데 이것은 어떻게 할 수 없는 것인지요?

by finecomp [2008.04.07 11:46:05]
수행순서는 잘 알고계시는데...
START WITH 절에도 AND는 되니 먼저 여기서 빼셔야겠죠...^^;

by 최원석 [2008.04.08 18:16:28]
아 그렇군요.
start with ~
and s_date (조건)
connect by
and s_date (조건)

이렇게 하면 된다는 뜻이네요...

으흐흐 신기하게도 잘 됩니다.

알려주셔서 감사합니다.

이제 누적 소요량 구하는 방법 연구할 일만 남았습니다 ㅡㅡ;
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입