and DECODE(sign(CNT-3), case when (case when A.SPL_ASIS_DN_DT is null then to_char(A.SPL_REQUEST_DATE, 'YYYY-MM-DD') else to_char(A.SPL_ASIS_DN_DT, 'YYYY-MM-DD') end) = to_char(C190.DUTYDAT,'YYYY-MM-DD') then '1' else '0' end,'1') = '1'
문법상 틀린건 없습니다만...
문제는 논리상 요구조건에 부합하느냐? 하는거죠...
소스코드가 너무 복잡합니다.
요구사항은 의외로 간단할것같은 예감이 드네요...
맞는지 틀린지 본인도 모르겠는 복잡한 코드를 줄이는 것보다는
요구사항을 설명해 주시고 새로 작성해 보는것이 나을듯 합니다.
참고로 제일 안쪽 Case 문을 간단하게 고쳐보면...
-- 변경전 : 불필요한 Case 사용으로 to_char 함수 두번 사용 --
case when A.SPL_ASIS_DN_DT is null
then to_char(A.SPL_REQUEST_DATE, 'YYYY-MM-DD')
else to_char(A.SPL_ASIS_DN_DT, 'YYYY-MM-DD')
end
-- 변경후 : case 문 제거 및 nvl 사용으로 to_char 한번만 사용 --
TO_CHAR(NVL(a.spl_asis_dn_dt, a.spl_request_date), 'yyyy-mm-dd')
또한 조건이 맞으면 case 로 결과 가져와 다시 비교하는 방식이 이상하네요.
여러 조건을 순차로 비교확인하려면 그냥 조건식을 and로 연결하면 됩니다.
AND cnt > 3
AND TO_CHAR(NVL(a.spl_asis_dn_dt, a.spl_request_date), 'yyyy-mm-dd')
= TO_CHAR(c190.dutydat, 'yyyymmdd')