안녕하세요. 쿼리 가끔씩 막힐때 찾아보며 도움 받고 있습니다. -- 선입선출 문의 드립니다. -- 컬럼명 : 계좌, 순번, 구분, 수량 -- 구분 : 1:매도/2:매수 WITH T ( acnt, seq, gb, qnt ) ( SELECT '1111', '001', '2', 2 FROM DUAL UNION ALL SELECT '1111', '002', '2', 2 FROM DUAL UNION ALL SELECT '1111', '003', '1', 2 FROM DUAL UNION ALL SELECT '1111', '004', '1', 1 FROM DUAL UNION ALL SELECT '1111', '005', '1', 5 FROM DUAL -- 질의하는 데이터 입니다. UNION ALL SELECT '1111', '006', '2', 2 FROM DUAL UNION ALL SELECT '1111', '007', '2', 2 FROM DUAL ) SELECT * FROM T [기대결과] 계좌 순번(잔고) 구분 수량 청산순번(구분) 처리구분 청산수량 1111 001 2 2 003(1) 청산 2 1111 002 2 2 004(1) 청산 1 1111 002 2 2 005(1) 청산 1 -- 수량배분으로 1건 청산 1111 005 1 4 - 신규 0 -- 005의 잔여수량을 신규 잔고로 생성(행추가) 1111 005 1 4 006(2) 청산 2 -- 청산되는 구분이 달라집니다.(구분의 기준값이 스위치 됩니다) 1111 005 1 4 007(2) 청산 2 -- 최종 청산되어 잔고수량이 0 이 됩니다. 즉, 매도/매수 구분을 기준으로 선입선출 잔고가 정리되다가, 잔고소진 시점에 1. 잔고수량 범위 내에 소진시 - 정상처리 2. 잔고수량 초과건 발생 시 - 소진 후 잔여수량을 신규잔고로 생성(위 처리구분이 신규행) 3. 이후 반대거래로 청산처리( 위에서 신규행 이후 발생건) 이렇게 처리되야 합니다. 초과건 발생한 경우 처리에 실마리도 안 잡혀서 문의드립니다. 감사합니다.