테이블명 | ||||||||
TEMP | ||||||||
구분코드 | 진행상태 | 처리구분 | 결과내용 | 진행상태 | 처리구분 | |||
200 | 300 | 01 | 제외 | 100 | 처리대기 | 00 | 정상 | |
200 | 200 | 01 | 추출대상 | 200 | 처리중 | 01 | 불능 | |
200 | 200 | 00 | 추출대상 | 300 | 재처리 | |||
200 | 100 | 00 | 추출대상 | 400 | 처리완료 | |||
200 | 200 | 00 | 추출대상 | |||||
100 | 300 | 추출대상 | ||||||
700 | 300 | 00 | 추출대상 | |||||
210 | 100 | 00 | 제외 | |||||
150 | 200 | 00 | 제외 | |||||
조건1) | ||||||||
거래구분 | 진행상태 | |||||||
200 | 100 | |||||||
200 | ||||||||
300 | ||||||||
조건2) | ||||||||
거래구분 | 진행상태 | |||||||
700 | 100 | |||||||
200 | ||||||||
300 | ||||||||
조건3) | ||||||||
거래구분 | 진행상태 | |||||||
100 | 300 | |||||||
조건4) | ||||||||
거래구분 | 진행상태 | 처리구분 | 제외대상 | |||||
200 | 300 | 01 |
위와 같은 temp 테이블이 있다고 가정합니다.
각각데이터에 조건은 총 4가지유형입니다.
조건1) 구분코드= 200 AND 진행상태 IN(100,200,300) 포함 대상
조건2) 구분코드 = 700 AND 진행상태 IN(100,200,300) 포함 대상
조건3) 구분코드= 100 AND 진행상태 = 300 포함 대상
조건 4) 구분코드= 200 진행상태 = 300 처리구분 01인 경우 대상에서 제외
이 조건에 대해 TEMP테이블 데이터에서 추출되는 데이터는 맨 첫 데이터에서 구분코드 200 진행상태 300 처리구분 01 이 (조건4)에 만족하기때문에 대상에서 제외처리가 됩니다. 따라서 총 조회되는 건수는 맨 위 대상을 제외한 총 6건이 나와야되는 SQL문의드려봅니다 .UNION ALL 밖에 방법이 없을가요?
고수님들의 조언 부탁드립니다.
SELECT * FROM temp WHERE (구분코드 = 200 AND 진행상태 IN (100,200)) OR (구분코드 = 700 AND 진행상태 IN (100,200,300)) OR (구분코드 = 100 AND 진행상태 = 300) OR (구분코드 = 200 AND 진행상태 = 300 AND NVL(처리구분, '00') != '01') ; SELECT * FROM temp WHERE (구분코드 = 200 AND 진행상태 IN (100,200,300) AND NOT (진행상태 = 300 AND NVL(처리구분, '00') = '01') ) OR (구분코드 = 700 AND 진행상태 IN (100,200,300)) OR (구분코드 = 100 AND 진행상태 = 300) ; SELECT * FROM temp WHERE (구분코드, 진행상태) IN ( (200, 100), (200, 200), (200, 300) , (700, 100), (700, 200), (700, 300) , (100, 300) ) AND NOT (구분코드 = 200 AND 진행상태 = 300 AND NVL(처리구분, '00') = '01') ;