쿼리질문입니다. 0 6 1,745

by 윤경호 [SQL Query] 조인 쿼리 [2013.07.24 10:10:21]



안녕하세요
예전에 마농님께서 알려주신 쿼리를 이용하여 데이터를 불러왔습니다. 그런데 궁금증이 있어 올립니다.

SELECT c.급여항목코드명     AS 급여항목코드명 
     , c.급여항목코드     AS 급여항목코드
     , b.지급금액 * c.요율  AS 지급금액

  FROM TBMG_직원정보 a
, TBMG_급여관리 b
    , TBMG_급여코드 c
 WHERE b.귀속년월 = '201307'
   AND a.기관코드 = '4020000000'
   AND b.기관코드 = '4020000000'
   AND c.기관코드 = '4020000000'
   AND c.급여공제구분 = '02'
   AND b.사원번호 = a.사원번호
  
   AND b.급여항목코드 = DECODE(c.급여공제구분, '02', '996', c.급여항목코드)
   AND c.순번 = (SELECT MAX(순번)
FROM TBMG_급여코드
WHERE 기관코드= '4020000000')
 
 GROUP BY  c.급여항목코드, c.급여항목코드명, b.사원번호, b.지급금액, c.요율
 ORDER BY  c.급여항목코드

이 쿼리의 결과가
급여항목코드명  :  급여항목코드  :  지급금액  :  사원번호
국민연금  :     005   :   782.52 :   1 
국민연금  :     005   :   645.12 :   2
국민연금  :     005   :   167.98 :   3
국민연금  :    005   :   482.52 :   4
건강보험  :.......

이런식으로 나오는데요 사원번호는 보여드리게 위해 추가했구요
국민연금의 지급금액을 더해서 하나의 국민연금 로우에 보여주고 싶습니다.

급여항목코드명 : 급여항목코드 : 지급금액:  
국민연금   : 005   : 2078.14:

AND b.급여항목코드 = DECODE(c.급여공제구분, '02', '996', c.급여항목코드) 이코드에서
지급금액은 급여항목코드가 996인 지급금액에서 요율을 곱한값입니다.

SELECT 부분에 , SUM(b.지급금액 * c.요율)  AS 지급금액 이런 식으로 SUM을 넣어야하나요?

기초가 부족해서 이해가 잘 안됩니다. 자세하게 알려주시면 감사하겠습니다.
by 손님 [2013.07.24 10:43:21]

급여항목코드명, 급여항목코드로 그룹처리 후 지급금액들을 합친 것입니다.

SELECT c.급여항목코드명 AS 급여항목코드명 
, c.급여항목코드 AS 급여항목코드
, SUM(b.지급금액 * c.요율)  AS 지급금액

  FROM TBMG_직원정보 a
, TBMG_급여관리 b
    , TBMG_급여코드 c
 WHERE b.귀속년월 = '201307'
   AND a.기관코드 = '4020000000'
   AND b.기관코드 = '4020000000'
   AND c.기관코드 = '4020000000'
   AND c.급여공제구분 = '02'
   AND b.사원번호 = a.사원번호
  
   AND b.급여항목코드 = DECODE(c.급여공제구분, '02', '996', c.급여항목코드)
   AND c.순번 = (SELECT MAX(순번)
FROM TBMG_급여코드
WHERE 기관코드= '4020000000')
 
 GROUP BY  c.급여항목코드명,c.급여항목코드
 ORDER BY  c.급여항목코드



by 윤경호 [2013.07.24 10:47:18]
감사합니다.
잘해결됐습니다.

by 마농 [2013.07.24 10:44:15]
GROUP BY 항목에 사원번호가 있기 때문에 사원별로 나온거지요.
사원별로 나오길 원하지 않는다면 GROUP BY 항목에서 사원번호를 빼세요.
물론 금액부분은 SUM 을 하셔야지요.
- 변경전 : GROUP BY  c.급여항목코드, c.급여항목코드명, b.사원번호, b.지급금액, c.요율
- 변경후 : GROUP BY  c.급여항목코드, c.급여항목코드명

by 윤경호 [2013.07.24 10:47:50]
매번 도움주셔서 감사합니다.
잘해결됐습니다.

by 손님 [2013.07.24 10:48:04]

추가로 그룹처리(그룹핑)을 한다는 것은 중복 되는 것을 1개로 합친 다는 의미입니다.
ex) GROUP BY c.급여항목코드명,c.급여항목코드

위의 GROUP BY 처리로 국민연금(급여항목코드명), 005(급여항목코드)를 1개로 합친 후
지급금액 4개의 합을 SUM(b.지급금액 * c.요율) 을 한것입니다.

by 윤경호 [2013.07.24 10:54:04]

깊이 알지 못했던것 같습니다.
감사합니다.

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