집계 쿼리에 대한 질문입니다. 0 2 2,012

by DONKEY [SQL Query] GROUP BY 집계 [2016.05.10 08:40:46]



IF I_TOTAL_GB = 'G' THEN
  OPEN O_RC1 FOR
     SELECT (SELECT COM_NM
               FROM OCS.ZMM_COM_CD
              WHERE COM_CD = A.DOC_GB
                AND DIV_CD = 'DOC_GB') DOC_GB
           ,A.DOC_INST_NM
           ,COUNT(*) DOC_TOT
           ,(SELECT COUNT(*)
               FROM MET_DOC_MGT
              WHERE DOC_FNSH_YN = 'C'
                AND DOC_YY = A.DOC_YY
                AND DOC_GB = A.DOC_GB
                AND DOC_INST_NM = A.DOC_INST_NM) DOC_FNSH_REQ
          ,(SELECT COUNT(*)
               FROM MET_DOC_MGT
              WHERE DOC_FNSH_YN = 'E'
                AND DOC_YY = A.DOC_YY
                AND DOC_GB = A.DOC_GB
                AND DOC_INST_NM = A.DOC_INST_NM) DOC_FNSH_FIN
       FROM MET_DOC_MGT A
      WHERE A.DOC_YY = I_DOC_YY
   GROUP BY A.DOC_GB ,A.DOC_INST_NM,A.DOC_YY,A.DOC_GB
   ORDER BY 1,2
;
  ELSIF I_TOTAL_GB = 'D' THEN
    OPEN O_RC1 FOR
     SELECT (SELECT COM_NM
               FROM OCS.ZMM_COM_CD
              WHERE COM_CD = A.DOC_GB
                AND DIV_CD = 'DOC_GB') DOC_GB
           ,A.DOC_DEPT_NM
           ,COUNT(*) DOC_TOT
           ,(SELECT COUNT(*)
               FROM MET_DOC_MGT
              WHERE DOC_FNSH_YN = 'C'
                AND DOC_YY = A.DOC_YY
                AND DOC_GB = A.DOC_GB
                AND DOC_DEPT_NM = A.DOC_DEPT_NM) DOC_FNSH_REQ
          ,(SELECT COUNT(*)
               FROM MET_DOC_MGT
              WHERE DOC_FNSH_YN = 'E'
                AND DOC_YY = A.DOC_YY
                AND DOC_GB = A.DOC_GB
                AND DOC_DEPT_NM = A.DOC_DEPT_NM) DOC_FNSH_FIN
       FROM MET_DOC_MGT A
      WHERE A.DOC_YY = I_DOC_YY
   GROUP BY A.DOC_GB ,A.DOC_DEPT_NM,A.DOC_YY,A.DOC_GB
   ORDER BY 1,2
;
END IF
;

안녕하십니까~ 좋은 아침 입니다. 아침 댓바람부터 질문 하나 드리겠습니다!
제가 집계쿼리를 짜는데 그룹바이를 하는데 있어 궁금한게 있습니다.
테이블은 MET_DOC_MGT 한테이블에 관한 집계이며 이 테이블에서 DOC_GB,DOC_INST_NM별
각각 DOC_FNSH_YN = 'C'의 카운트와 'E'의 카운트 결과를 내고싶습니다.일딴 어거지로
짜서 결과값은 나오는거 같은데 DOC_INST_NM과 DOC_DEPT_NM이 널값이면
DOC_FNSH_YN에 대한 카운트가 집계되지 않습니다..
그리고 들어오는 파라미터 값에 따라 다르게 그룹바이 처리를 하고싶은데(일딴은 분기문으로 처리했습니다. 근데 지저분해서....) 
어떻게 하는지도 궁금하구요.. 도움 부탁드립니다!
감사합니다.

* 추가로 스키마는 이러합니다

by 마농 [2016.05.10 09:35:46]
SELECT b.com_nm doc_gb_nm
     , DECODE(i_total_gb, 'G', doc_inst_nm, 'D', doc_dept_nm) doc_inst_dept_nm
     , COUNT(*) doc_tot
     , COUNT(DECODE(doc_fnsh_yn, 'C', 1)) doc_fnsh_req
     , COUNT(DECODE(doc_fnsh_yn, 'E', 1)) doc_fnsh_fin
  FROM met_doc_mgt    a
     , ocs.zmm_com_cd b
 WHERE b.com_cd = a.doc_gb
   AND b.div_cd = 'DOC_GB'
   AND a.doc_yy = i_doc_yy
 GROUP BY b.com_nm
     , DECODE(i_total_gb, 'G', doc_inst_nm, 'D', doc_dept_nm)
 ORDER BY doc_gb_nm, doc_inst_dept_nm
;

 


by DONKEY [2016.05.10 10:44:06]

감사드립니다!!

 , COUNT(DECODE(doc_fnsh_yn, 'C', 1)) doc_fnsh_req
 , COUNT(DECODE(doc_fnsh_yn, 'E', 1)) doc_fnsh_fin

이부분은 doc_fnsh_yn 값이 C이면 1이고 그외에는 카운트 하지 않게 돌아가는거..죠? 

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