1 * M = M |
M * 1 = M |
1 * 1 = 1 |
M * M = MM |
CREATE table copy_t (NO, NO2) as
SELECT rownum,
substr(to_char(rownum,'09'),2,2)
FROM any_table
WHERE rownum <= 31 ;
INSERT into 전표테이블
(생성일자, ... , 계정과목, 금액, ... )
SELECT to_char(sysdate,'yyyymmdd'), ... ,
decode(y.no, 1, '1234',
2, '5678',
3,'9876'),
decode(y.no, 1, 반환금,
2, 위약금,
3, 기기철거비), ...
FROM 계약정산테이블 x, COPY_T y
WHERE x.해약일 = :input_date
and y.NO <= 3 ;
COPY_T 테이블을 이용하여 금액이 있는 컬럼 만큼 로우를 복제한 후 각 로우마다
필요한 값을 지정하여 INSERT
INSERT into 전표테이블
(생성일자, ... , 계정과목, 금액, ... )
SELECT to_char(sysdate,'yyyymmdd'), ... ,
decode(y.no, 1, '1234',
2, '5678',
3, '9876'),
decode(y.no, 1, 반환금,
2, 위약금,
3, 철거비), ...
FROM 계약정산테이블 x, COPY_T y
WHERE x.해약일 = :input_date
and y.NO in (decode(반환금,0,null,1),
decode(위약금,0,null,2),
decode(철거비,0,null,3)) ;
COPY_T 테이블을 이용하여 복제할 때 복제원 로우의 값에 따라 복제할 양을 유동적으로 결정
순번 | 발생일 | 시작일 | 종료일 | 선급금액 |
---|---|---|---|---|
1101 | 970501 | 970520 | 970925 | 5,000,000 |
1102 | 970601 | 970615 | 970805 | 3,800,000 |
1103 | 970701 | 970712 | 971020 | 6,780,000 |
1104 | 970501 | 970507 | 970718 | 2,890,000 |
순번 | 적용월 | 매출금액 | ..... |
---|---|---|---|
1101 | 9705 | 429,687 | ..... |
1101 | 9706 | 1,171,875 | ..... |
1101 | 9707 | 1,210,937 | ..... |
1101 | 9708 | 1,210,937 | ..... |
1101 | 9709 | 976,564 | ..... |
INSERT into 월별매출
(일련번호, 적용월, 매출금액, ... )
SELECT 일련번호, substr(:작업월,1,4)||y.NO2,
(decode(y.NO2, to_char(종료일,'mm'),
to_char(종료일,'dd'),
to_char(last_day(to_date(substr(:작업월,1,4)
||y.NO2),'yyyymm')),'dd'))
- decode(y.NO2, to_char(시작일,'mm'),
to_char(시작일,'dd'),'01')
+1) * (선급액/(종료일-시작일)+1)), ...
FROM 선급금 x, COPY_T y
WHERE x.발생일 like :작업월||'%'
and y.NO2 between to_char(시작일,'mm')
and to_char(종료일,'mm') ;
SELECT 고객명, 부서, 호봉, 편성금액,
into :cust_name, :dept, :salgrade,
:budget_amt,
FROM CUSTOMER,
EMPLOYEE,
BUDGET
WHERE고객번호 = :cust_no
and 사번 = :emp_no
and 부서(+) = :dept_no || SUBSTR(사번,0,0)
and 계정과목(+) = '1101'
and 예산년도(+) = to_char(sysdate,'yyyy') ;
SELECT y.계정명,
sum(decode(x.부문,'원사',금액)),
sum(decode(x.부문,'제직',금액)),
.............................................
FROM (SELECT substr(계정,1,2) 항목,
sum(금액) 금액
FROM 전표테이블
WHERE 공장코드 = '1공장'
and 일자 like :작업월||'%'
and 계정 between '1234'
and '6543'
GROUP BY substr(계정,1,2) ) x,
계정테이블 y
WHERE y.계정 between '1200' and '6500'
and y.분류 = '1'
and x.항목(+) = substr(y.계정,1,2) ;
SELECT item,
decode(NO,1,grade,'소계'),
sum(m_qty), sum(m_amt),
sum(s_qty), sum(s_amt)
FROM ( SELECT item, grade,
sum(m_qty) m_qty,
sum(m_amt) m_amt,
sum(s_qty) s_qty,
sum(s_amt) s_amt
FROM TAB1
WHERE yymm = :in_daye
and saup = :saup
GROUP BY item, grade ) x,
COPY_T y
WHERE y.NO <= 2
GROUP BY item,
NO,
decode(NO,1,grade,'소계') ;
DECODE(NO,1,'소계', GRADE) 로 바꾸면 소계가 먼저 오고, 그 아래에 내역이 오는 형식으로
출력할 수가 있다.
- 강좌 URL : http://www.gurubee.net/lecture/2482
- 구루비 강좌는 개인의 학습용으로만 사용 할 수 있으며, 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^
- 구루비 강좌는 서비스 제공을 위한 목적이나, 학원 홍보, 수익을 얻기 위한 용도로 사용 할 수 없습니다.