SELECT
A.rnum,
A.lev as "level",
A.subj_seq,
A.subject,
A.subj_ord,
A.up_subj_seq,
A.stat,
A.mod_dt,
A.mod_id,
A.mod_ip,
A.reg_dt,
A.reg_id,
A.reg_ip,
A.cont,
A.read_cnt,
A.doc_seq,
A.verify_yn,
A.verify_id,
A.real_nm_yn,
A.verify_dt,
A.str_pg,
A.end_pg,
A.avgPoint,
A.opinionCount,
LAG (A.subj_seq) OVER (PARTITION BY A.up_subj_seq ORDER BY A.rnum) as pre_subj_seq,
LEAD (A.subj_seq) OVER (PARTITION BY A.up_subj_seq ORDER BY A.rnum) as next_subj_seq
FROM
(
SELECT
rownum as rnum,
level as lev,
subj_seq,
subject,
subj_ord,
up_subj_seq,
stat,
mod_dt,
mod_id,
mod_ip,
reg_dt,
reg_id,
reg_ip,
cont,
read_cnt,
doc_seq,
verify_yn,
verify_id,
real_nm_yn,
verify_dt,
str_pg,
end_pg,
(SELECT nvl(round(avg(point),1),0) FROM subject_point B WHERE B.doc_seq = doc_seq and B.subj_seq = subj_seq) as avgPoint,
(SELECT count(*) FROM subject_opinion B WHERE B.doc_seq = doc_seq and B.subj_seq = subj_seq) as opinionCount
FROM subject
WHERE doc_seq = 1 and stat='R'
START WITH up_subj_seq is null
CONNECT BY prior subj_seq = up_subj_seq
ORDER SIBLINGS BY subj_ord
) A
ORDER BY rnum;
현재 쿼리는 위와 같구요. DB를 잘 안써서... 공부하면서 했는데 잘 안되네요. 먼저 connect by 써서 계층형으로 뽑고
그상태에서 lag ,lead 함수를 쓰게되면 order siblings 쓰게되면 안먹더라구요. 정렬 때문이라고 나와서...
서브로 connect by 절을 두고 했습니다.
일단 이렇게 사용하는게 맞는지도 궁금하구요.
추가로 여기서 connect by 절에서 where 에 조건을 사용할 경우 결과가 이상해지더라구요...
위에보면 조건이 두개가 있는데요. 저부분만 조건을 추가 할 경우; 하위 애들이 중복으로 출력되버립니다...
그래서 아무렇게나 해보다가 start with 절에 where절에 적은 조건을 똑같이 옮겨서 적을 경우
정상출력이 되더라구요. 구글링을 해봐도 이렇게 사용하란 글이 없는데... 왜 이렇게 뜨나
쿼리를 잘못짠건가 싶어서.. 문의드려요. connect by 를 사용 할 경우 where 조건은 어디에 넣어야하나요?