Pivot 질문입니다. 1 2 3,131

by ArkSaber [SQLServer] PIVOT [2014.04.14 17:03:31]



쿼리 공부중에 '출력을 세로가 아닌 가로로 할 수 있다'라고 해서 지금 열심히 보고는 있는데,

단일 테이블을 이용했을 경우 정상적으로 출력이 됩니다.

그런데 한 테이블(월급 - 컬럼은 사원번호, 월급지급일, 총수당, 총공제, 실지급)을 이용한 출력에서 다른 데이블(월급 상세 - 사원번호, 월급지급일, 월급코드, 금액)을 이용하여 중간에 더 추가를 하려고 합니다.



사원번호  지급일  총수당  수당액1  수당액2  수당액3  총공제  공제액1  공제액2  공제액 3  총수당

이런 식으로 출력하려고 합니다.

JOIN 함수는 어디에 어떻게 들어가야 하나요??
by 마농 [2014.04.14 18:02:21]
 
-- 1. 피벗 후 조인 --
SELECT a.사원번호, a.월급지급일
     , a.총수당, b.수당액1, b.수당액2, b.수당액3
     , a.총공제, b.공제액1, b.공제액2, b.공제액3
     , a.실지급
  FROM 월급 a
     , (SELECT 사원번호, 월급지급일
             , MIN(DECODE(월급코드, '수당액1', 금액)) 수당액1
             , MIN(DECODE(월급코드, '수당액2', 금액)) 수당액2
             , MIN(DECODE(월급코드, '수당액3', 금액)) 수당액3
             , MIN(DECODE(월급코드, '공제액1', 금액)) 공제액1
             , MIN(DECODE(월급코드, '공제액2', 금액)) 공제액2
             , MIN(DECODE(월급코드, '공제액3', 금액)) 공제액3
          FROM 월급상세
         GROUP BY 사원번호, 월급지급일
        ) b
 WHERE a.사원번호 = b.사원번호
   AND a.월급지급일 = b.월급지급일
 ORDER BY a.사원번호, a.월급지급일
;
-- 2. 조인 후 피벗
SELECT a.사원번호, a.월급지급일
     , a.총수당
     , MIN(DECODE(b.월급코드, '수당액1', b.금액)) 수당액1
     , MIN(DECODE(b.월급코드, '수당액2', b.금액)) 수당액2
     , MIN(DECODE(b.월급코드, '수당액3', b.금액)) 수당액3
     , a.총공제
     , MIN(DECODE(b.월급코드, '공제액1', b.금액)) 공제액1
     , MIN(DECODE(b.월급코드, '공제액2', b.금액)) 공제액2
     , MIN(DECODE(b.월급코드, '공제액3', b.금액)) 공제액3
     , a.실지급
  FROM 월급 a
     , 월급상세 b
 WHERE a.사원번호 = b.사원번호
   AND a.월급지급일 = b.월급지급일
 GROUP BY a.사원번호, a.월급지급일, a.총수당, a.총공제, a.실지급
 ORDER BY a.사원번호, a.월급지급일
;

by ArkSaber [2014.04.14 18:07:09]
오오...감사합니다. 덕분에 막힌 부분이 확 뚫렸습니다!!
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입