|부서명 | 영업부| 관리부| 총무부| 전산부| 급여합계|
|---------|----------|----------|----------|----------|----------|
|과장 | 4500| 7400| 4003| 0| 15903|
|대리 | 1800| 0| 4206| 0| 6006|
|부장 | 2000| 3000| 2803| 0| 7803|
|사원 | 3100| 6800| 2706| 0| 12606|
|회장 | 5000| 0| 0| 0| 5000|
-- [ 방법 1 ] - 김철기가 쓴 방법입니다.(select)
--
select s.sajob "부서명",
(select nvl(sum(s1.sapay),0) from sawon s1 where deptno=10 and s1.sajob=s.sajob ) "영업부",
(select nvl(sum(s1.sapay),0) from sawon s1 where deptno=20 and s1.sajob=s.sajob ) "관리부",
(select nvl(sum(s1.sapay),0) from sawon s1 where deptno=30 and s1.sajob=s.sajob ) "총무부",
(select nvl(sum(s1.sapay),0) from sawon s1 where deptno=40 and s1.sajob=s.sajob ) "전산부",
sum(s.sapay) "급여합계"
from sawon s group by s.sajob;
-- [ 방법 2 ] - 고경은씨가 쓴 방법입니다.(case)
-- dname을 쓰신걸 deptno로 바꿔보았습니다.--
select sajob "부서명",
sum(case deptno when 10 then sapay else 0 end) "영업부",
sum(case deptno when 20 then sapay else 0 end) "관리부",
sum(case deptno when 30 then sapay else 0 end) "총무부",
sum(case deptno when 40 then sapay else 0 end) "전산부",
sum(sapay) "급여합계"
from sawon group by sajob;
-- [ 방법 3 ] - 강사님이 쓴 방법입니다.(decode)
-- 뭔가 화려하고 간결한 강사님의 코드를 원하셨던 분들은 다소 실망이 없잖았을꺼라고 생각합니다만...
--
select s.sajob "직책",
sum(decode(d.dname,'영업부',s.sapay,0)) "영업부",
sum(decode(d.dname,'관리부',s.sapay,0)) "관리부",
sum(decode(d.dname,'총무부',s.sapay,0)) "총무부",
sum(decode(d.dname,'전산부',s.sapay,0)) "전산부",
sum(s.sapay) "급여합계"
from sawon s, dept d
where s.deptno = d.deptno
group by s.sajob;
break on report
compute sum label 직책별합계 of 영업부 관리부 총무부 전산부 급여합계 on 직책 report
위의 두 행을 입력하면 아래와 같은 결과가 나온답니다.
직책 | 영업부| 관리부| 총무부| 전산부| 급여합계
----------|----------|----------|----------|----------|----------
과장 | 7400| 0| 4500| 4003| 15903
대리 | 0| 0| 1800| 4206| 6006
부장 | 3000| 0| 2200| 2803| 8003
사원 | 6800| 0| 3100| 2706| 12606
회장 | 0| 0| 5000| 0| 5000
|----------|----------|----------|----------|----------
**직책별합계| 17200| 0| 16600| 13718| 47518**