그룹함수 사용시 공란 제거 방법 문의 0 3 1,054

by 김태혁 [SQL Query] 그룹함수 [2014.12.30 11:57:21]


WITH T AS (
    SELECT '남1호' EMP_NM , 'AAAAAAAAAA' COUNSEL_NM , '2014-05' PLAN_YM, 10 AMT FROM DUAL UNION ALL
    SELECT '남1호' EMP_NM , 'BBBBBBBBBB' COUNSEL_NM , '2014-06' PLAN_YM, 20 AMT FROM DUAL UNION ALL
    SELECT '남1호' EMP_NM , 'CCCCCCCCCC' COUNSEL_NM , '2014-06' PLAN_YM, 30 AMT FROM DUAL UNION ALL
    SELECT '여1호' EMP_NM , 'DDDDDDDDDD' COUNSEL_NM , '2014-05' PLAN_YM, 10 AMT FROM DUAL UNION ALL
    SELECT '여1호' EMP_NM , 'EEEEEEEEEE' COUNSEL_NM , '2014-05' PLAN_YM, 20 AMT FROM DUAL UNION ALL
    SELECT '여1호' EMP_NM , 'FFFFFFFFFF' COUNSEL_NM , '2014-05' PLAN_YM, 30 AMT FROM DUAL UNION ALL
    SELECT '여1호' EMP_NM , 'GGGGGGGGGG' COUNSEL_NM , '2014-05' PLAN_YM, 40 AMT FROM DUAL UNION ALL
    SELECT '여1호' EMP_NM , 'HHHHHHHHHH' COUNSEL_NM , '2014-05' PLAN_YM, 50 AMT FROM DUAL
)
SELECT
       EMP_NM
     , CASE PLAN_YM WHEN '2014-04' THEN COUNSEL_NM   END COUNS04
     , CASE PLAN_YM WHEN '2014-04' THEN SUM(AMT)     END AMT04
               
     , CASE PLAN_YM WHEN '2014-05' THEN COUNSEL_NM   END COUNS05     
     , CASE PLAN_YM WHEN '2014-05' THEN SUM(AMT)     END AMT05
            
     , CASE PLAN_YM WHEN '2014-06' THEN COUNSEL_NM   END COUNS06             
     , CASE PLAN_YM WHEN '2014-06' THEN SUM(AMT)     END AMT06
  FROM T
 GROUP BY EMP_NM, COUNSEL_NM, PLAN_YM 
 
상기 쿼리 결과 -->
     EMP_NM     COUNS04     AMT04     COUNS05     AMT05     COUNS06     AMT06
   남1호                            AAAAAAAAAA     10
   남1호                                                  BBBBBBBBBB     20
   남1호                                                  CCCCCCCCCC     30
   여1호                            DDDDDDDDDD     10
   여1호                            EEEEEEEEEE     20
   여1호                            FFFFFFFFFF     30
   여1호                            GGGGGGGGGG     40
   여1호                            HHHHHHHHHH     50
  
  
   EMP_NM     COUNS04     AMT04     COUNS05     AMT05     COUNS06     AMT06
   남1호                            AAAAAAAAAA     10     BBBBBBBBBB     20
   남1호                                                  CCCCCCCCCC     30
   여1호                            DDDDDDDDDD     10
   여1호                            EEEEEEEEEE     20
   여1호                            FFFFFFFFFF     30
   여1호                            GGGGGGGGGG     40
   여1호                            HHHHHHHHHH     50  
조언을 부탁드립니다.
by jkson [2014.12.30 13:16:13]

SELECT '여1호' EMP_NM , 'IIIIIIIIII' COUNSEL_NM , '2014-06' PLAN_YM, 60 AMT FROM DUAL 인 자료가 있으면 DDD.. 옆에 붙어야 하나요 HHH.. 옆에 붙어야 하나요?


by 마농 [2014.12.30 13:34:05]
SELECT emp_nm
     , MIN(DECODE(plan_ym, '2014-04', counsel_nm)) couns04
     , MIN(DECODE(plan_ym, '2014-04', amt       ))   amt04
     , MIN(DECODE(plan_ym, '2014-05', counsel_nm)) couns05
     , MIN(DECODE(plan_ym, '2014-05', amt       ))   amt05
     , MIN(DECODE(plan_ym, '2014-06', counsel_nm)) couns06
     , MIN(DECODE(plan_ym, '2014-06', amt       ))   amt06
  FROM (SELECT emp_nm, counsel_nm, plan_ym
             , SUM(amt) amt
             , ROW_NUMBER() OVER(PARTITION BY emp_nm, plan_ym ORDER BY counsel_nm) rn
          FROM t
         GROUP BY emp_nm, counsel_nm, plan_ym 
        )
 GROUP BY emp_nm, rn
 ORDER BY emp_nm, rn
;

 


by 김태혁 [2014.12.30 13:47:16]

마농님 감사합니다.

가끔 이곳에 들리지만, 글을 올린것은 처음이네요.

2014년 마무리 잘하시고, 새해에도 건승하세요.

다시한번 빠른 답변 감사드립니다.

 

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