|
파생열 변환과 관련하여 아무래도 이해가 잘 되지 않는 점이 있어서 다시 질문드립니다. 다음과 같은 소스 데이터가 있습니다.
select * from is_dnt_goods_src
is_dnt_goods_yn1 is_dnt_goods_yn2 ---------------- ---------------- Y NULL Y NULL Y NULL Y NULL Y NULL NULL A NULL A NULL A NULL A Y NULL Y NULL Y NULL Y NULL Y NULL Y NULL Y NULL NULL A NULL A NULL A NULL A NULL A NULL A Y NULL Y NULL Y NULL Y NULL Y NULL Y NULL
여기서 필요한 비즈니스 로직은 is_dnt_goods_yn 이라는 필드값을 파생열 변환을 사용해서 새 열로 만들어내는데,
'is_dnt_goods_yn2 가 A 면 A를 리턴하고 A가 아니면(NULL이거나 다른값) 이면 is_dnt_goods_yn1 을 검사해서 그 값이 Y면 Y를 리턴하고 그게 아니면(NULL이거나 다른값) 이면 N 를 리턴한다'
입니다. 위의 로직을 파생열 변환에서 다음과 같이 구현해보았습니다.
is_dnt_goods_yn <새열로 추가> is_dnt_goods_yn2 == 'A' ? 'A' : ((is_dnt_goods_yn1 == 'Y') ? 'Y' : 'N')
결과는 다음과 같습니다.
is_dnt_goods_yn1 is_dnt_goods_yn2 is_dnt_goods_yn ---------------- ---------------- --------------- Y NULL NULL Y NULL NULL Y NULL NULL Y NULL NULL Y NULL NULL NULL A A NULL A A NULL A A NULL A A Y NULL NULL Y NULL NULL Y NULL NULL Y NULL NULL Y NULL NULL Y NULL NULL Y NULL NULL NULL A A NULL A A NULL A A NULL A A NULL A A NULL A A Y NULL NULL Y NULL NULL Y NULL NULL Y NULL NULL Y NULL NULL Y NULL NULL
A는 제대로 넘어오는데 Y값이 제대로 채워지지 않습니다. 아무래도 이상해서 파생열 변환의 expression 을 바꿨습니다.
!ISNULL(is_dnt_goods_yn2) ? is_dnt_goods_yn2 : (!ISNULL(is_dnt_goods_yn1) ? is_dnt_goods_yn1 : 'N')
NULL을 검사하도록 했죠. 그랬더니 다음과 같이 나왔습니다.
is_dnt_goods_yn1 is_dnt_goods_yn2 is_dnt_goods_yn ---------------- ---------------- --------------- Y NULL Y Y NULL Y Y NULL Y Y NULL Y Y NULL Y NULL A A NULL A A NULL A A NULL A A Y NULL Y Y NULL Y Y NULL Y Y NULL Y Y NULL Y Y NULL Y Y NULL Y NULL A A NULL A A NULL A A NULL A A NULL A A NULL A A Y NULL Y Y NULL Y Y NULL Y Y NULL Y Y NULL Y Y NULL Y
정확한 결과가 나왔습니다.
제가 expression 을 잘못 사용한 것일까요? 3항 연산자 evaluate 하는데 버그가 있는 것일까요? -_-;;;;
이거때문에 정말 한참을 헤맸습니다. 흑. 혹시 이런 경우를 겪어 보셨는지요????
|