오라클 계층형쿼리 START WITH문 사용할때, 하위계층 값들이 전부 NULL이면 안보여주고, 값이 있는것들만 0 2 133

by 공기 [SQL Query] start with [2017.12.07 11:15:22]


보여주고 싶습니다..

 

즉, 고객이 요구하는것은   값이 없는  NULL 로우들은  안보여주고,  의미있는 값이 있는  로우들만 화면에 보여달라는겁니다.

 

최상위부모

     ------ 부모1

        ---------말단 팀  100, 200, 300

        ---------말단 팀  200, 200, 700

        ---------말단 팀  400, 200, 500

     ------ 부모2

        ---------말단 팀  100, 900, 300

        ---------말단 팀  100, 200, 300

        ---------말단 팀  100, 200, 100

     ------ 부모3

        ---------말단 팀 null, null, null

        ---------말단 팀 null, null, null

        ---------말단 팀 null, null, null

 

이렇게  있을때,  말단팀 값들이  전부  NULL이면  화면에 안나오게 하고싶습니다.

(위와같이  있을때,   부모3 하위 그룹들이  전부 NULL이니까    쿼리조회에 안나오게..)

 

계층그룹별로 sum()을 해서 체크하면 가능하려나요?  

 

P.S.

(계층쿼리를 응용하는게  쉽지가 않네요...ㅠ.ㅠ)

 

by 마농 [2017.12.07 13:24:10]
WITH t AS
(
SELECT '00' cd, '' pcd, '최상위부모' nm, null v FROM dual
UNION ALL SELECT '10', '00', '부모1'  , null FROM dual
UNION ALL SELECT '11', '10', '말단1팀',   10 FROM dual
UNION ALL SELECT '12', '10', '말단2팀',   20 FROM dual
UNION ALL SELECT '13', '10', '말단3팀',   30 FROM dual
UNION ALL SELECT '20', '00', '부모2'  , null FROM dual
UNION ALL SELECT '21', '20', '말단4팀',   10 FROM dual
UNION ALL SELECT '22', '20', '말단5팀', null FROM dual
UNION ALL SELECT '23', '20', '말단6팀',   30 FROM dual
UNION ALL SELECT '30', '00', '부모3'  , null FROM dual
UNION ALL SELECT '31', '30', '말단a팀', null FROM dual
UNION ALL SELECT '32', '30', '말단b팀', null FROM dual
UNION ALL SELECT '33', '30', '말단c팀', null FROM dual
)
SELECT *
  FROM (SELECT cd, pcd, nm, v
             , (SELECT SUM(v)
                  FROM t
                 START WITH cd = a.cd
                 CONNECT BY PRIOR cd = pcd
                ) sum_v
          FROM t a
        )
 START WITH pcd IS NULL
 CONNECT BY PRIOR cd = pcd AND sum_v > 0
;

 


by 공기 [2017.12.07 17:00:20]

마농//님  답변 감사합니다.

예전에  저런식으로  Connect by Prior cd = pcd  AND  sum_V >  0 

 

AND  sum_V >  0 조건  줄수있는거  본적이 있는데...   바쁘다보니  기억도 안나더군요..

 

정말 감사합니다...

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입