with t as (
select 'A' D1 , 10 D3 from dual
UNION ALL
select 'B' D1 , 20 D3 from dual
UNION ALL
select 'C' D1 , 30 D3 from dual
)
select BASE.D1, BASE.D2, T.D3
from t ,
(SELECT 'A' D1 ,'AA' D2 FROM DUAL
UNION ALL
SELECT 'B' D1 ,'AA' D2 FROM DUAL
UNION ALL
SELECT 'C' D1 ,'BB' D2 FROM DUAL
UNION ALL
SELECT 'D' D1 ,'CC' D2 FROM DUAL
UNION ALL
SELECT 'E' D1 ,'CC' D2 FROM DUAL ) BASE
WHERE T.D1 (+)= BASE.D1
위 형식의 데이터가있었습니다.
그런데 입력 되는 데이터인 T테이블에, D2컬럼 갑자기 추가되었습니다
1년째 D2없이 D1만으로 테이블이 관리되고있었었기때문에,
현재 D2에는 1년동안의 데이터는 NULL이고 최근 입력된데이터만 D2값이있습니다
BASE테이블은 마스터로 관리되고있는데..
D2는 중복 값이있기때문에, D1, D2와 함께 WHERE 조건문에걸어야합니다
그러나 아우터조인과 OR조건 혹은 NVL이 함께 써지지가않더군요..
WHERE T.D1 (+)= BASE.D1 조건만 하면 D2의 중복되는 값떄문에안되고
AND T.D2 (+)= BASE.D2 조건은 D2의 NULL이 아닐때만 해당해야하는데..
어떻게해야될까요...?
with t as (
select 'A' D1 ,'' D2, 10 D3 from dual
UNION ALL
select 'B' D1 ,'' D2, 20 D3 from dual
UNION ALL
select 'D' D1 ,'CC' D2, 30 D3 from dual
UNION ALL
select 'D' D1 ,'DD' D2, 40 D3 from dual
)
select BASE.D1, BASE.D2, T.D3
from t ,
(SELECT 'A' D1 ,'AA' D2 FROM DUAL
UNION ALL
SELECT 'B' D1 ,'AA' D2 FROM DUAL
UNION ALL
SELECT 'C' D1 ,'BB' D2 FROM DUAL
UNION ALL
SELECT 'D' D1 ,'CC' D2 FROM DUAL
UNION ALL
SELECT 'E' D1 ,'CC' D2 FROM DUAL ) BASE
WHERE T.D1 (+)= BASE.D1
AND T.D2 (+)= BASE.D2
|