Oracle/SQL2018. 12. 27. 08:31

화물수량별 차등운임을 계산해보자.


테스트를 위해 아래와 같이 테이블을 생성하자. 화물수량이 1~50은 30, 51~100은 20, 101~999는 10의 운임이 적용된다.

-- 1
DROP TABLE 운송 PURGE;
DROP TABLE 운임 PURGE;

CREATE TABLE 운송 (운송번호 NUMBER, 화물유형 NUMBER, 운송수량 NUMBER);
CREATE TABLE 운임 (화물유형 NUMBER, 최소수량 NUMBER, 최대수량 NUMBER, 화물운임 NUMBER);

INSERT INTO 운송 VALUES (1, 1,  90);
INSERT INTO 운송 VALUES (2, 1, 120);
INSERT INTO 운임 VALUES (1,   1,  50, 30);
INSERT INTO 운임 VALUES (1,  51, 100, 20);
INSERT INTO 운임 VALUES (1, 101, 999, 10);
COMMIT;


아래 쿼리로 화물수량별 차등운임을 계산할 수 있다.

-- 2
SELECT a.*
     , (SELECT SUM (LEAST (a.운송수량 - x.최소수량 + 1
                         , x.최대수량 - x.최소수량 + 1) * x.화물운임)
          FROM 운임 x
         WHERE x.화물유형  = a.화물유형
           AND x.최소수량 <= a.운송수량) AS 화물운임
  FROM 운송 a;
 
운송번호 화물유형 운송수량 화물운임
-------- -------- -------- --------
       1        1       90     2300 -- (50 * 30) + (40 * 20) = 2300
       2        1      120     2700 -- (50 * 30) + (50 * 20) + (20 * 10) = 2700
 
2 행이 선택되었습니다.


'Oracle > SQL' 카테고리의 다른 글

클로저 테이블 #2  (0) 2019.02.01
클로저 테이블 #1  (0) 2019.01.31
XMLTABLE 함수로 DUMMY 데이터 생성  (0) 2018.12.17
CLOB, BLOB 더미 데이터 생성  (0) 2018.10.15
NLS_DATE_FORMAT 파라미터와 데이터 변환  (0) 2018.09.01
Posted by 정희락_