ROLLUP 다시 질문 ! 0 5 2,363

by ArkSaber [SQLServer] RollUP [2014.04.18 15:20:59]


SELECT * FROM
 (select T3.BGName AS 사업부명
      , T2.DeptName AS 부서명
   , T1.EmpName AS 사원명
      , T6.SalName AS 수당공제명
   , T5.Money AS 금액
   from Employee T1
   Inner join Dept T2
        On T1.DeptCD = T2.DeptCD
   Inner join BusinessGroup T3
        On T2.BG = T3.BG
   Inner Join Salary T4
        on T1.EmpNO = T4.EmpNO
   Inner join SalDetail T5
        On T4.EmpNO = T5.EmpNO
   Inner Join SalComCode T6
        On T5.SalCode = T6.SalCode
  where T4.SalDT like '20130520'
  group by T3.BGName, T2.DeptName, T1.EmpName, T5.Money, T6.SalName) AS P
  PIVOT (SUM(P.금액)
    FOR 수당공제명
  in ([건강보험], [고용보험], [국민연금], [기타공제], [기본금], [상여금], [연장수당], [직책수당], [직급수당], [자격증수당], [기타수당])) AS A

 

일단 현 단계에서는 사업부-부서-사원명-수당 및 공제금액으로 잘 나옵니다.

이번엔 여기에서 중간에 수당합계 및 공제합계와 실지급액(수당합-지급액)을 추가하려고 합니다.

일단 공제금액(4개 열)-공제합-수당금액(7개 열)-수당합-실지급액순으로요.

좋은 답변 기다립니다!!!!

by 마농 [2014.04.18 15:42:27]

MySQL 에 PIVOT 이 되던가요?


by ArkSaber [2014.04.18 15:53:11]

아...SQL SERVER입니다.


by 농부지기 [2014.04.18 16:01:38]

읍스 DB가 SQL Server 였나요...

오라클로 다 짜 놨는데~~

근데, SQL SERVER도 PIVOT이 되나요?  위 질문에 PIVOT 함수가 있네요.

일단, 혹시 몰라서 올려 볼게요.

 

WITH PAY AS
   (select T3.BGName   AS 사업부명
         , T2.DeptName AS 부서명
         , T1.EmpName  AS 사원명
         , T6.SalName  AS 수당공제명
         , 수당구분코드                  <-- 수당, 공제 구분코드가 반드시 필요
         , T5.Money AS 금액
       from Employee T1 Inner join Dept T2
                     On T1.DeptCD = T2.DeptCD  
                        Inner join BusinessGroup T3
                     On T2.BG = T3.BG  
                        Inner Join Salary T4
                     on T1.EmpNO = T4.EmpNO  
                        Inner join SalDetail T5
                     On T4.EmpNO = T5.EmpNO
                        Inner Join SalComCode T6
                     On T5.SalCode = T6.SalCode
     where T4.SalDT like '20130520'
     group by T3.BGName, T2.DeptName, T1.EmpName, T5.Money, T6.SalName
   )
SELECT * 
  FROM( SELECT *
          FROM PAY
       
       union all
       
       SELECT 사업부명
            , 부서명
            , 사원명
            , decode(수당구분코드, '공제관련수당코드', '공제합계', '수당합계') AS 수당공제명
            , sum(decode(수당구분코드, '공제관련수당코드', 금액, 금액))        AS 금액
         FROM pay
        GROUP BY 사업부명
            , 부서명
            , 사원명

       union all
       
       SELECT 사업부명
            , 부서명
            , 사원명
            , '실지급액' AS 수당공제명
            , sum(decode(수당구분코드, '공제관련수당코드', 금액 * -1, 금액))        AS 금액
         FROM pay
        GROUP BY 사업부명
            , 부서명
            , 사원명

   ) AS P
   PIVOT (SUM(P.금액)
     FOR 수당공제명
  in ([건강보험], [고용보험], [국민연금], [기타공제], [공제합계], [기본금], [상여금], [연장수당], [직책수당], [직급수당], [자격증수당], [기타수당], [수당합계],[실지급액])) AS A

 


by ArkSaber [2014.04.18 17:35:18]

PIVOT 잘 됩니다.

그리고 SQL SERVER에서는 DECODE가 안먹습니다...


by 마농 [2014.04.21 08:29:30]
-- 작성하신 쿼리에서 SELECT * 대신 필요 항목명들 주욱 적어주시면 됩니다.
SELECT 사업부명
     , 부서명
     , 사원명
     , 건강보험
     , 고용보험
     , 국민연금
     , 기타공제
     , 건강보험 + 고용보험 + 국민연금 + 기타공제 AS 공제합계
     , 기본금
     , 상여금
     , 연장수당
     , 직책수당
     , 직급수당
     , 자격증수당
     , 기타수당
     , 기본금 + 상여금 + 연장수당 + 직책수당 + 직급수당 + 자격증수당 + 기타수당 AS 수당합계
     , 기본금 + 상여금 + 연장수당 + 직책수당 + 직급수당 + 자격증수당 + 기타수당
     - 건강보험 - 고용보험 - 국민연금 - 기타공제 AS 실지급액

 

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