sql 문의드려봅니다. 0 1 594

by 바라기짱조아 [SQL Query] [2018.02.02 23:24:20]


테이블명                 
                 
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 밖에 방법이 없을가요?

고수님들의 조언 부탁드립니다.

by 마농 [2018.02.05 08:28:42]
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')
;

 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입