오라클 : 11g
A_TABLE 에는
연번 구분 수식
1 1 (
2 2 변수1
3 2 변수2
4 2 변수3
5 1 +
6 2 변수4
7 2 변수5
8 1 )
9 1 /
10 1 (
11 2 변수6
12 2 변수7
13 1 )
* 상단 구분컬럼은 1:수식, 2:변수
B_TABLE 에는
연번 변수 값
1 변수1 10
1 변수1 5
2 변수2 10
3 변수2 5
4 변수2 20
5 변수3 10
6 변수4 5
7 변수4 10
8 변수5 10
9 변수6 20
10 변수7 15
결과 : (10+5+10+5+20+10 + 5+10+10) / (20+15) = 2.42
위 두테이블을 이용하여 A_TABLE의 수식을 완성하고 값을 구하고자 합니다.
변수와 변수 사이는 + 로 연결됩니다.
행을 열로 바꾸면서 두테이블을 조인하여 해보았지만 생각처럼 되지 않아 이렇게 문의 드립니다.
고수님들의 많은 조언 부탁드립니다.
감사합니다.
WITH a_table AS ( SELECT 1 seq, 1 gb, '(' x FROM dual UNION ALL SELECT 2, 2, '변수1' FROM dual UNION ALL SELECT 3, 2, '변수2' FROM dual UNION ALL SELECT 4, 2, '변수3' FROM dual UNION ALL SELECT 5, 1, '+' FROM dual UNION ALL SELECT 6, 2, '변수4' FROM dual UNION ALL SELECT 7, 2, '변수5' FROM dual UNION ALL SELECT 8, 1, ')' FROM dual UNION ALL SELECT 9, 1, '/' FROM dual UNION ALL SELECT 10, 1, '(' FROM dual UNION ALL SELECT 11, 2, '변수6' FROM dual UNION ALL SELECT 12, 2, '변수7' FROM dual UNION ALL SELECT 13, 1, ')' FROM dual ) , b_table AS ( SELECT 1 seq, '변수1' x, 10 v FROM dual UNION ALL SELECT 2, '변수1', 5 FROM dual UNION ALL SELECT 3, '변수2', 10 FROM dual UNION ALL SELECT 4, '변수2', 5 FROM dual UNION ALL SELECT 5, '변수2', 20 FROM dual UNION ALL SELECT 6, '변수3', 10 FROM dual UNION ALL SELECT 7, '변수4', 5 FROM dual UNION ALL SELECT 8, '변수4', 10 FROM dual UNION ALL SELECT 9, '변수5', 10 FROM dual UNION ALL SELECT 10, '변수6', 20 FROM dual UNION ALL SELECT 11, '변수7', 15 FROM dual ) SELECT TO_NUMBER(dbms_xmlgen.getxmltype('SELECT ' || LISTAGG(DECODE(a.gb, 1, a.x, a.s || b.v)) WITHIN GROUP(ORDER BY a.seq) || ' FROM dual').Extract('//text()')) x FROM (SELECT seq, gb, x , CASE WHEN gb = 2 AND LAG(gb) OVER(ORDER BY seq) = 2 THEN '+' END s FROM a_table ) a LEFT OUTER JOIN (SELECT x , SUM(v) v FROM b_table GROUP BY x ) b ON a.gb = 2 AND a.x = b.x ;