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.
(계층쿼리를 응용하는게 쉽지가 않네요...ㅠ.ㅠ)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | 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 ; |