하나의테이블, 윗 레코드에서 계산한값으로 점점 계산해가는 로직 0 4 1,474

by 김태성 [PL/SQL] [2015.05.04 22:40:26]


안녕하십니까 행님들. 항상 도움받고 있습니다.

이직한지 4개월째인데 제가 너무 무능하고 멍청한 것 같아 너무 힘듭니다. 오늘도 형님들의 도움으로 하루 생명연장 하러왔습니다 ㅠ.ㅠ

아래와 같은 테이블이 있습니다.

ITEM_조부    ITEM_부모   ITEM_자식   VALUES1         VALUE2         GET_VALUE

A                         A             B                 0.5                    2                       4

A                         B             C                 1                      2                        8

A                         C             D                 1                      2                       16

A                         D             E                 1                      3                      48

GET_VALUE 값을 산출해내는 로직을 저번주 연휴 시작전날에 8시간동안 머리를 쥐어짜봤는데 못하고 돌아와서 쉬어도 쉬는게 아닙니다 ㅋ.ㅋ..

VALUE2까지는 현재 있는 테이블 이구요(정확히는 테이블 결합해서 select한 결과..)저걸 가지고 GET_VALUE SELECT하고 싶은데 너무 어렵습니다 ㅠ.ㅠ..참고로 4개만적었지만 실제로 부모가 몇개가 있는지는 정해지지 않았으므로 숫자를 정해서 만들면 안되구요...이번에 이직하고 정말 SE랑 개발머리가 아니란걸 뼈저리게 느낍니다.

이거 어떻게하면 풀 수 있을까요 ㅠ.ㅠ..

아 참고로 오라클입니다. 잘 부탁드립니다.

by 창조의날개 [2015.05.05 10:02:17]

질문의 의도를 파악하기 힘듭니다..

 

1. 정확한 입력값을 with문으로 만들어 주시면 좋습니다.

  - 조부, 부모, 자식 값은 있는데 자기 자신 값을 없네요?

2. 출력값(얻고자 하는 값)의 정확한 규칙을 알려주세요..

   - 어떻게 무슨 수식으로 4, 8, 16, 48이 만들어 졌나요?

 

 


by 김태성 [2015.05.05 21:05:47]

제가 어정쩡하게 생략하고 설명한부분이 있어서 이해하시기 어려우셨을 것 같습니다 ;

알고싶은 부분만 찝어서 말씀드리면. 맨위의 4 이걸 고정치라고 하고.

A B C일때는 4x2(VALUE2) 해서8이되고

A C D일때는 8X2(VALUE2)해서 16

A D E일때는 16x3(VALUE2)해서 48

이 되는 방식입니다.이걸 구현하는 방식이 알고싶어요 ^^

답변감사합니다 __


by 마농 [2015.05.06 08:48:11]
WITH t AS
(
SELECT 'A' item_조부, 'A' item_부모, 'B' item_자식, 0.5 values1, 2 value2 FROM dual
UNION ALL SELECT 'A', 'B', 'C', 1, 2 FROM dual
UNION ALL SELECT 'A', 'C', 'D', 1, 2 FROM dual
UNION ALL SELECT 'A', 'D', 'E', 1, 3 FROM dual
)
SELECT item_조부, item_부모, item_자식, values1, value2
     , (SELECT ROUND(EXP(SUM(LN(value2 / values1))))
          FROM t
         START WITH item_자식 = m.item_자식
         CONNECT BY PRIOR item_조부 = item_조부
                AND PRIOR item_부모 = item_자식
        ) get_value
  FROM t m
;

 


by 김태성 [2015.05.07 20:06:57]

참조해서 해결했습니다 정말 감사합니다 ^^

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