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.
(계층쿼리를 응용하는게 쉽지가 않네요...ㅠ.ㅠ)
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 ;