교육시간 분석함수 문제.. 0 1 1,493

by 차차 [2017.04.06 22:24:36]


안녕하세요 값이 출력은 되는데 제가 원하는데로 나오지 않아.. 질문 드립니다.

 

SELECT '0' CHK
          ,C.SUBORG_CODE AS USER_SUBORG_CD
          ,C.DEPTCD AS DEPT_CD
          ,(SELECT FN2_GET_DEPTNAME( C.DEPTCD ) FROM DUAL) AS USER_DEPT_NM
          ,B.PROC_ID AS PROC_ID
          ,B.PROC_NM AS PROC_NM
          ,A.NAME AS USER_NM
          ,A.USERID AS USER_ID
          ,A.EDU_TP_CD AS EDU_TP_CD
          ,A.ISU_FLAG AS ISU_FLAG
          ,A.START_DATE AS START_DATE
          ,A.END_DATE   AS END_DATE
          ,TO_CHAR(SUM(A.CS_TIME)) AS CS_TIME 교육시간
          ,TO_CHAR(SUM(A.ISU_CS_TIME)) AS ISU_CS_TIME 교육누적시간
          ,SUM(A.ISU_CS_TIME) OVER(ORDER BY A.EDU_TP_CD ASC 
           ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) 교육누적시간 test1
          ,SUM(SUM(A.ISU_CS_TIME))OVER(ORDER BY EDU_TP_CD) 교육누적시간 test2
          ,A.EXC_CODE AS EXC_CODE
          ,A.ATTACH_NO
          ,DECODE(A.ATTACH_NO,'','N',null,'N','Y') AS ATTACH_YN
          ,A.REMARKS AS REMARKS
          ,A.LST_MDF_DT    AS LST_MDF_DT
          ,A.LST_MDF_UID   AS LST_MDF_UID
     FROM  TB2_GNR_EDU_ENR A
          ,TB2_MST_PROC_CODE B
          ,TB2_ADM_PMAS C
    WHERE  A.USERID = C.USERID
      AND  B.PROC_ID = C.PROC_ID
      group by C.SUBORG_CODE
          ,C.DEPTCD 
          ,B.PROC_ID
          ,B.PROC_NM 
          ,A.NAME 
          ,A.USERID
          ,A.EDU_TP_CD
          ,A.ISU_FLAG 
          ,A.START_DATE 
          ,A.END_DATE   
          ,A.CS_TIME
          ,A.ISU_CS_TIME
          ,A.EXC_CODE
          ,A.ATTACH_NO            
          ,A.REMARKS 
          ,A.LST_MDF_DT  
          ,A.LST_MDF_UID 

교육시간 컬럼들은 넘버형식입니다.

to_char 로 한 이유는 화면에서 입력이 안되어서..잠시나마 to_char 로 변환 시켰습니다.

EDU_TP_CD / CS_TIME / ISU_CS_TIME

   국어     /   2           /        2

    국어  /     4            /      6

    국어  /   4             /       10   --> 10시간이면 수료

    수학  /  2            /        2 

이렇게 나오게 하고 싶은데 현재 누적시간TEST1 쿼리는 교육코드를 다 합친 누적 시간이 나와버리네요..

가장 문제는 A.EDU_TP_CD 코드가 교육 코드로 짯는데 각 코드 별로 교육누적합계를 구해야 하는데

그게 잘 안됩니다.... 

조건절에 EDU_TP_CD를 넣기엔 조회가 너무 번거로워 질꺼 같아서 조건절엔 넣지 않을려고 하는데..

어떤부분을 수정을 해야 할까요?? 도움 부탁드립니다.

by 마농 [2017.04.06 23:44:43]

GROUP BY 항목이 너무 많네요?
  - GROUP BY 의 정확한 사용법을 모르고 사용하는 듯 합니다.
분석함수 사용시 그룹별로 집계하려면?
  - PARTITION BY 구문을 사용하면 됩니다.
전반적으로 집계함수 및 분석함수의 의미를 잘 이해하지 못하고 작성한 쿼리로 보입니다.
  - http://www.gurubee.net/lecture/2671

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