스칼라 쿼리 무조건 100% JOIN 형태로 변경이 가능한가요?
wretzky 수험생

답변 채택시 : 0코아

답변 0 추천 0 조회 218 2019.05.28
SELECT A.거래번호
      , CASE WHEN D.상품코드 IN ( 'LLLL', 'MMMM', 'NNNN'  )
       THEN
(
SELECT SUM( DECODE( 
       SIGN( DECODE( CD, 'AAA10', Y.금액 * 환율
       , 'BBB10', Y.금액 * 환율 * -1, 0 )
                                     - DECODE( CD, 'AAA20', Y.금액 * 환율
       , 'BBB20', Y.금액 * 환율 * -1, 0 ), 1 ) -- SIGN
                                      DECODE( CD, 'AAA10', Y.금액 * 환율
       , 'BBB10', Y.금액 * 환율 * -1, 0 )
                                     - DECODE( CD, 'AAA20', Y.금액 * 환율
       , 'BBB20', Y.금액 * 환율 * -1, 0 ), 0 ) -- DECODE
) 계산된 금액
FROM TABLE_X   X
                  , TABLE_Y   Y
                  , TABLE_   Z
WHERE X = Y = Z 조인들
AND X.거래번호 = A.거래번호
AND ( X.어떤 코드 NOT IN ('1111', '2222', '3333')
OR ( X.어떤 코드 IN ('1111', '2222', '3333')
AND D.상품 코드 IN ('OOOO', 'RRRR', 'PPPP' )
)
)
)
ELSE
(
SELECT SUM( DECODE( 
       SIGN( DECODE( CD, 'AAA10', Y.금액 * 환율
       , 'BBB10', Y.금액 * 환율 * -1, 0 )
                                     - DECODE( CD, 'AAA20', Y.금액 * 환율
       , 'BBB20', Y.금액 * 환율 * -1, 0 ), 1 ) -- SIGN
                                      DECODE( CD, 'AAA10', Y.금액 * 환율
       , 'BBB10', Y.금액 * 환율 * -1, 0 )
                                     - DECODE( CD, 'AAA20', Y.금액 * 환율
       , 'BBB20', Y.금액 * 환율 * -1, 0 ), 0 ) -- DECODE
) 계산된 금액
FROM TABLE_X   X
                  , TABLE_Y   Y
                  , TABLE_   Z
WHERE X = Y = Z 조인들
AND X.거래번호 = A.거래번호
AND ( X.어떤 코드 NOT IN ('1111', '2222')
OR ( X.어떤 코드 IN ('1111', '2222')
AND D.상품 코드 IN ('OOOO', 'RRRR', 'PPPP' )
)
)
)
END 금액11
FROM (
SELECT 거래번호1
FROM
WHERE
) A
      ,     ( SELECT ... FROM .. WHERE )    B
      , ( SELECT ... FROM .. WHERE )    C
      ,     테이블                                D
WHERE   A  =  B(+)
AND      A  =  C(+)
AND      A  =  D(+)
;

안녕하세요, 쿼리를 급히 수정해야 하는데 일주일 넘게
위의 문제를 해결 못하고 있어 고수, 선배님들께 간곡히 청합니다..

요점은 위의 스칼라가 포함된 쿼리가 전혀 돌아가지가 않습니다.
실제로 1000라인 정도 쿼리인데 대략 저렇습니다.
특히 X 테이블의 건수도 억단위, Y 도 6천만 정도인데
여기에 아래 FROM 절에서 뽑아져 오는 25000건으로
SUM을 구하니 답이 전혀 안나옵니다..

그래서 생각한 것이 인라인뷰로 조인형태로 바꾸고자 하는데
바꾸다보니
위의 A.거래번호를 거는 것과
D.상품코드로 조건을 거는 것이 너무나도 걸림돌이 되고 있습니다.

FROM 절로의 조인형태 변경은 

SELECT A.거래번호
      , CASE WHEN D.상품코드 IN ( 'LLLL', 'MMMM', 'NNNN'  )
       THEN  S.금액
END
FROM (
SELECT 거래번호1
FROM
WHERE
) A
      ,     ( SELECT ... FROM .. WHERE )    B
      , ( SELECT ... FROM .. WHERE )    C
      ,     테이블                                D
      ,     (
SELECT SUM( 금액 )    금액
FROM TABLE_X   X
                  , TABLE_Y   Y
                  , TABLE_Z   Z
WHERE X = Y = Z 조인들
) S
WHERE   A  =  B(+)
AND      A  =  C(+)
AND      A  =  D(+)
AND      S(+)  =  NVL( A.거래번호대체, A.거래번호)
;

이런식으로 하는데 위의 ASIS쿼리에서 
A.거래번호를 거는 것과 D.상품코드로 조건을 거는 것이
도저히 답이 안나옵니다.. 혹시 해결방안이 있을까요?

이런 저런 제약들이 있어 인라인뷰로의 JOIN 형태가 어렵네요.

금액데이터가.. 이거 맞추면 저게 안맞고 저걸 맞추면 이게 안맞는..
FROM 절로 옮기기 너무 난해하네요

솔직히 구조적으로 바꿀수 있는지도 잘 모르겠습니다..

꼭 한번 봐주세요..
댓글 (0)
목록 답변등록