database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
ㆍOracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
Oracle Q&A 41857 게시물 읽기
No. 41857
level-1 계산하여 데이터 조회하기
작성자
차상환
작성일
2021-07-06 19:22
조회수
2,664


SELECT  1 AS LV, 'A' AS CODE1, 'B' AS CODE2, NULL AS RATE, 10   AS VAL FROM DUAL UNION ALL

SELECT  2 AS LV, 'B' AS CODE1, 'C' AS CODE2, 0.5  AS RATE, NULL AS VAL FROM DUAL UNION ALL

SELECT  2 AS LV, 'B' AS CODE1, 'D' AS CODE2, 0.5  AS RATE, NULL AS VAL FROM DUAL UNION ALL

SELECT  3 AS LV, 'C' AS CODE1, 'F' AS CODE2, 1    AS RATE, NULL AS VAL FROM DUAL UNION ALL

SELECT  3 AS LV, 'D' AS CODE1, 'F' AS CODE2, 1    AS RATE, NULL AS VAL FROM DUAL



LV   CODE1      CODE2      RATE     VAL   

---- ---------- ---------- -------- ------

   1 A          B                       10

   2 B          C               0.5      

   2 B          D               0.5      

   3 C          F                 1      

   3 D          F                 1

  

  

문의)


LV2부터 VAL을 구하고 싶습니다.

2번째 ROW의 VAL 값은 CODE2가 B인 VAL(10) * RATE(0.5)

3번째 ROW의 VAL 값은 CODE2가 B인 VAL(10) * RATE(0.5)

4번째 ROW의 VAL 값은 CODE2가 C인 VAL(2번째 ROW 계산값=5) * RATE(1)

5번째 ROW의 VAL 값은 CODE2가 D인 VAL(3번째 ROW 계산값=5) * RATE(1)



LV   CODE1      CODE2      RATE     VAL   

---- ---------- ---------- -------- ------

   1 A          B                       10

   2 B          C               0.5    

   2 B          D               0.5     5 

   3 C          F                 1     5 

   3 D          F                 1     5


이렇게 SQL을 처리하고 싶어 문의드려요.

이 글에 대한 댓글이 총 3건 있습니다.

F 가 두개로 중복인데? 하나는 E 아닌가요?

중복이 나면 안될 듯 합니다.

혹시 4레벨에서 F 를 참조하는경우가 있다면? F 가 두개라서 곤란해 집니다.

마농(manon94)님이 2021-07-07 11:30에 작성한 댓글입니다.
이 댓글은 2021-07-07 11:31에 마지막으로 수정되었습니다.

LV3은 F이여도 마지막 이여서 상관없어요. - BOM구성하려고 하고 있습니다.

쉽게 될거 같으면서도 안되네요

재귀로 처리해보고 있습니다.

감사합니다.

차상환님이 2021-07-07 13:08에 작성한 댓글입니다.
이 댓글은 2021-07-07 13:09에 마지막으로 수정되었습니다. Edit

아래와 같이 해결했습니다. 감사합니다.


WITH TT AS (

 SELECT  1 AS LV, 'A' AS CODE1, 'B' AS CODE2, NULL AS RATE, 10   AS VAL FROM DUAL UNION ALL

  SELECT  2 AS LV, 'B' AS CODE1, 'C' AS CODE2, 0.5  AS RATE, NULL AS VAL FROM DUAL UNION ALL

  SELECT  2 AS LV, 'B' AS CODE1, 'D' AS CODE2, 0.5  AS RATE, NULL AS VAL FROM DUAL UNION ALL

  SELECT  3 AS LV, 'C' AS CODE1, 'F' AS CODE2, 1    AS RATE, NULL AS VAL FROM DUAL UNION ALL

  SELECT  3 AS LV, 'D' AS CODE1, 'F' AS CODE2, 1    AS RATE, NULL AS VAL FROM DUAL

 ),

 AA(LV, CODE1, CODE2, RATE, VAL) AS (

 SELECT PARENT.LV

      , PARENT.CODE1

      , PARENT.CODE2

      , PARENT.RATE

      , PARENT.VAL

      --, 'PATRENT' AS GUBUN

 FROM TT PARENT

 WHERE RATE IS NULL

     UNION ALL

 SELECT CHID.LV

      , CHID.CODE1

      , CHID.CODE2

      , CHID.RATE

      , PARENT.VAL * CHID.RATE AS VAL

      --, 'CHID' AS GUBUN

   FROM AA PARENT, TT CHID

  WHERE CHID.CODE1 = PARENT.CODE2

 )

 SELECT LV

      , CODE1

      , CODE2

      , RATE

      , VAL

      --, GUBUN

   FROM AA

차상환님이 2021-07-07 13:35에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
41862count 여러개 조회할때 질문드립니다.
비건
2021-07-31
2413
41859접속 모듈 OraPgm
궁금이
2021-07-23
2290
41858최초검사일 기준으로 표시되는 유효기간 수정 방법 문의 [2]
노진규
2021-07-07
2731
41857level-1 계산하여 데이터 조회하기 [3]
차상환
2021-07-06
2664
41856조인시 실행계획에서 풀스캔 [1]
라라라
2021-07-02
2901
41853풀스캔 질문 드립니다 [2]
궁금이
2021-05-27
2982
41852오라클 19c(윈도우즈용 x64) 설치 에러!!!
신승익
2021-05-24
3029
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.017초, 이곳 서비스는
	PostgreSQL v16.4로 자료를 관리합니다