SQL*Plus, 데이터 연결 방법 – Union, Group by
항목 | 합계 | 1월 | 2월 | 3월 | 생략 |
---|---|---|---|---|---|
(1)총매출액 | 725,910 | 생략 | 생략 | 생략 | 생략 |
(2)매출원가(-) | 585,550 | 생략 | 생략 | 생략 | 생략 |
(3)매출총이익 | 140,360 | 생략 | 생략 | 생략 | 생략 |
(4)판매비 | 14,450 | 생략 | 생략 | 생략 | 생략 |
(5)일반관리비 | 10,980 | 생략 | 생략 | 생략 | 생략 |
(6)직접 R&D | 6,147 | 생략 | 생략 | 생략 | 생략 |
(7)이자비용 | 1,692 | 생략 | 생략 | 생략 | 생략 |
(8)영업외수익(-) | 3,420 | 생략 | 생략 | 생략 | 생략 |
(9)영업외비용 | 5,695 | 생략 | 생략 | 생략 | 생략 |
(10)본부비등 | 656 | 생략 | 생략 | 생략 | 생략 |
(11)직업비 계 | 36,200 | 생략 | 생략 | 생략 | 생략 |
(12)공헌이익 | 104,160 | 생략 | 생략 | 생략 | 생략 |
(13)간접비 | 24,120 | 생략 | 생략 | 생략 | 생략 |
(14)경상이익 | 80,040 | 생략 | 생략 | 생략 | 생략 |
* 단, (숫자)는 LINE 넘버
SELECT sum(tot*decode(NO-LINE,1,-1,3,-1,1) ) tot , sum(W01*decode(NO-LINE,1,-1,3,-1,1)) , … FROM ( SELECT LINE , sum(AMT) TOT , sum(decode(MM,'01',AMT)) W01 , … FROM ( SELECT y.NO LINE , MM , sum(AMT*decode(y.NO*LINE,6,-1,1) ) AMT /* LINE * y.NO 를 곱해서 6이 나오면 매출원가, -1을 곱해서 총매출액 - 매출원가 = 매출총이익을 산출 */ FROM ( SELECT '1' LINE , substr(년월,5,2) MM , sum(AMT) AMT /* 총매출액 */ FROM 매출집계 WHERE 년월 LIKE '1997%' GROUP BY substr(년월,5,2) UNION ALL SELECT '2' LINE , substr(년월,5,2) MM , sum(AMT) AMT /* 매출원가 */ FROM 매출원가 WHERE 년월 LIKE '1997%' GROUP BY substr(년월,5,2) ) x, COPY_T y WHERE y.NO IN (LINE, 3) GROUP BY y.NO, MM UNION ALL SELECT y.NO LINE , MM , SUM(AMT*decode(y.NO*LINE,88,-1,1) ) AMT /* 8에 LINE 11 = 88 */ FROM ( SELECT decode(substr(계정,1,2),'21', 13, substr(계정,2,2)+1) LINE , substr(일자,5,2) MM , SUM(AMT) AMT FROM 전표집계 WHERE 일자 LIKE '1997%' AND 계정 BETWEEN '203' AND '219' /* 210부터 219까지는 간접비 */ GROUP BY decode(substr(계정,1,2),'21', 13, substr(계정,2,2)+1), substr(일자,5,2) /* LINE 13은 간접비 */ ) x, COPY_T y WHERE y.NO IN (LINE,decode(LINE,13,NULL,11)) GROUP BY y.NO, MM ) GROUP BY LINE ) x, COPY_T y WHERE y.NO IN(LINE, decode(LINE,3,12, 11,12), decode(LINE,3,14,11,14,13,14)) GROUP BY y.NO;
원문 출처
Encore – 대용량 데이터베이스