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 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | 안녕하세요 회원여러분~ 시원한 아침입니다 오늘도 한 수 배워가고자 글을 남깁니다. 제가 요청 드릴 내용은! 특정한 부서의 병상수는 소계 및 총계에 합산되지 않되 조회는 되게끔 하고 싶습니다.. (특정 값을 제외 시키고싶어SUB_VAL5에 N이란 값을 넣어 시도 해보았으나.. 역시 의미없습니다) 간곡히 부탁드리겠습니다. 아래 그림에서 대괄호 친 값이 집계에 포함이 안되었으면 좋겠습니다.. SELECT A.VAL , B.SUB_VAL5 , SUB_VAL AS SUB_VAL , DECODE(SUB_VAL, 'AA' , '일반병동' , 'CC' , '중환자실' , 'DD' , '중환자실' , 'EE' , '중환자실' ,COM_NM) AS WARD_GB , DUT_DEPT_CD , DECODE(GROUPING_ID(A.VAL,DUT_DEPT_CD),1, '[소계]' ,3, '[총계]' ,COM_NM) AS DUT_DEPT_NM , NVL( SUM (BED_CNT),0) AS BED_CNT , DECODE(B.SUB_VAL5, '' ,TO_CHAR( SUM (BED_CNT)), 'N' , '[' ||BED_CNT|| ']' ) BED_CNT , SUM (NUR_REG) AS NUR_REG , SUM (NUR_TMP) AS NUR_TMP , SUM (NUR_TOT) AS NUR_TOT , SUM (NUR_AIDE_M) AS NUR_AIDE_M , SUM (NUR_AIDE_F) AS NUR_AIDE_F , SUM (NUR_AIDE_TMP) AS NUR_AIDE_TMP , SUM (NUR_AIDE_TOT) AS NUR_AIDE_TOT , SUM (PART_NUR_M) AS PART_NUR_M , SUM (PART_NUR_F) AS PART_NUR_F , SUM (PART_NUR_TMP) AS PART_NUR_TMP , SUM (PART_NUR_TOT) AS PART_NUR_TOT , SUM (ADMIN_JOB) ADMIN_JOB , SUM (REG_EMP) AS REG_EMP , SUM (TMP_EMP) AS TMP_EMP , DECODE(GROUPING_ID(A.VAL,DUT_DEPT_CD),1, SUM (MAT_LEAVE),3, SUM (MAT_LEAVE)*-1, SUM (MAT_LEAVE)) AS MAT_LEAVE , DECODE(GROUPING_ID(A.VAL,DUT_DEPT_CD),1, SUM (LEAVE),3, SUM (LEAVE)*-1, SUM (LEAVE)) AS LEAVE , DECODE(GROUPING_ID(A.VAL,DUT_DEPT_CD),1, SUM (SICK_LEAVE),3, SUM (SICK_LEAVE)*-1, SUM (SICK_LEAVE)) AS SICK_LEAVE , 'Y' CALC_YN FROM MIN_NUR_GRD_BAS A , OCS.ZMM_COM_CD B WHERE CALC_YMD = '20160622' AND B.COM_CD = DUT_DEPT_CD AND B.DIV_CD = 'NUR_DEPT_GB' GROUP BY GROUPING SETS((A.VAL,DUT_DEPT_CD,B.COM_NM,B.SORT_NO,A.SUB_VAL,BED_CNT,B.SUB_VAL5),(A.VAL),()) ORDER BY A.VAL,B.SORT_NO; |
소계 및 총계 구할 때는 Grouping Sets 보다는 Rollup 이 적당할 듯 하구요.
Group By 에 bed_cnt 는 빼는게 맞을 듯 하네요.
총계일 경우 마이너스를 붙여주는 부분의 Decode 문은 구문 간소화가 가능하겠네요.
원하시는 bed_cnt 부분도 Decode 로 해결하시면 됩니다.
a. b. 등 컬럼명에 알리아스를 생략한 경우가 많은데요.
테이블을 모르는 상태에서 쿼리 수정할 때 상당히 곤란합니다. 알리아스 꼭 붙여주세요.
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 29 30 31 32 33 | SELECT a.val , b.sub_val5 , a.sub_val , DECODE(a.sub_val, 'AA' , '일반병동' , 'CC' , '중환자실' , 'DD' , '중환자실' , 'EE' , '중환자실' , b.com_nm) AS ward_gb , a.dut_dept_cd , DECODE(GROUPING_ID(a.val, a.dut_dept_cd), 1, '[소계]' , 3, '[총계]' , b.com_nm) AS dut_dept_nm , NVL(DECODE( GROUPING (a.dut_dept_cd), 0, SUM (a.bed_cnt), SUM (DECODE(b.sub_val5, '' , a.bed_cnt))), 0) AS bed_cnt , SUM (nur_reg ) AS nur_reg , SUM (nur_tmp ) AS nur_tmp , SUM (nur_tot ) AS nur_tot , SUM (nur_aide_m ) AS nur_aide_m , SUM (nur_aide_f ) AS nur_aide_f , SUM (nur_aide_tmp) AS nur_aide_tmp , SUM (nur_aide_tot) AS nur_aide_tot , SUM (part_nur_m ) AS part_nur_m , SUM (part_nur_f ) AS part_nur_f , SUM (part_nur_tmp) AS part_nur_tmp , SUM (part_nur_tot) AS part_nur_tot , SUM (admin_job ) AS admin_job , SUM (reg_emp ) AS reg_emp , SUM (tmp_emp ) AS tmp_emp , SUM (mat_leave ) * DECODE(GROUPING_ID(a.val, a.dut_dept_cd), 3, -1, 1) AS mat_leave , SUM (leave ) * DECODE(GROUPING_ID(a.val, a.dut_dept_cd), 3, -1, 1) AS leave , SUM (sick_leave) * DECODE(GROUPING_ID(a.val, a.dut_dept_cd), 3, -1, 1) AS sick_leave , 'Y' calc_yn FROM min_nur_grd_bas a , ocs.zmm_com_cd b WHERE a.calc_ymd = '20160622' AND b.com_cd = a.dut_dept_cd AND b.div_cd = 'NUR_DEPT_GB' GROUP BY ROLLUP (a.val, (b.sort_no, a.sub_val, a.dut_dept_cd, b.com_nm, b.sub_val5)) ORDER BY a.val, b.sort_no ; |