로직 구현 가능 여부 질문입니다.. 0 1 3,734

by 새싹 [2023.11.30 11:10:43]


안녕하세요

 

  기본 1차 2차 3차
곱하기 - 2 2 5
수량 100 200 400 2000

 

하기와 같은 형식으로

1차의 수량에는 기본 * 1차 곱

2차의 수량에는 1차 수량 * 2차 곱

3차의 수량에는 2차 수량 * 3차 곱

이렇게 계산되어 나온 숫자로 연쇄 계산을 적용할 수 있는 방법 이 있나요?

혹시 있다면 도움 부탁드립니다.. 샘플 남길게요..

 

 

     with a as 
       (select 0 as base, 5 as one,  10 as two, 15 as three     from dual union all
        select 100  as base, 0 as one, 0 as two, 0 as three     from dual
       )
       select * from a

 

 

원하는 값입니다..

     with a as 
       (select 0 as base, 5 as one,  10 as two, 15 as three     from dual union all
        select 100  as base, 500 as one, 5000 as two, 75000 as three     from dual
       )
       select * from a
      

 

by 마농 [2023.11.30 13:46:29]

테이블 구조가 인위적이네요.
1 행과 2행의 역할과 항목수가 다른데
서로 다른 속성값을 하나의 컬럼안에 표현을 하고 있네요.
행을 구분하는 구분값도 없구요
정규화를 하면 기본 수량 테이블 하나
- 100
차수별 곱하기수 테이블 하나 있어야 할 듯 하네요.
- 1, 5
- 2, 10
- 3, 15
그러면 누적 곱 형태로 구현이 가능한데.
지금 형태에서는 그냥 노가다성으로 계산식 적어주는게 차라리 간단합니다.
 

WITH a AS
(
SELECT 0 base, 5 one, 10 two, 15 three FROM dual
UNION ALL SELECT 100, 0, 0, 0 FROM dual
)
SELECT base
     , CASE WHEN base = 0 THEN one   ELSE base * MAX(one          ) OVER() END one
     , CASE WHEN base = 0 THEN two   ELSE base * MAX(one*two      ) OVER() END two
     , CASE WHEN base = 0 THEN three ELSE base * MAX(one*two*three) OVER() END three
  FROM a
;
WITH t AS
(
SELECT 0 seq, 100 v FROM dual
UNION ALL SELECT 1,  5 FROM dual
UNION ALL SELECT 2, 10 FROM dual
UNION ALL SELECT 3, 15 FROM dual
)
-- 누적 곱 예시 --
SELECT seq
     , v
     , ROUND(EXP(SUM(LN(v)) OVER(ORDER BY seq))) x
  FROM t
;

 

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